home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / lazerbolt.s < prev    next >
Text File  |  1997-11-28  |  64KB  |  4,633 lines

  1.  
  2. SP EQU 1
  3. SPM EQU 1
  4. BS EQU 1
  5. BP EQU 1
  6. SH EQU 1
  7. PH EQU 1
  8. MB EQU 0
  9. ScreenWidth EQU 320
  10.  
  11. LARGESCREEN equ 0
  12.  
  13.  
  14. * the 'Hello World' program in 68000 Assembler
  15. * the C version can be found in the Intuition manual
  16.  
  17. * this source code (C) HiSoft 1992 All Rights Reserved
  18.  
  19. * for Devpac Amiga Version 2 the following symbols were changed
  20. * to avoid clashes with the new include files:
  21. * Screen->MyScreen, NewScreen->MyNewScreen
  22. * Window->MyWindow, NewWindow->MyNewWindow
  23.  
  24.     opt    c+,d+
  25.  
  26.     include    workbench:utilities/devpac/system            use pre-assembled header
  27.     include    exec/exec_lib.i
  28.     include    intuition/intuition.i
  29.     include    intuition/intuition_lib.i
  30.     include    graphics/graphics_lib.i
  31.     include    graphics/text.i
  32.  
  33. INTUITION_REV    equ    31        v1.1
  34. GRAPHICS_REV    equ    31        v1.1
  35.  
  36. * Open the intuition library
  37.  
  38.     moveq    #100,d4            default error return code
  39.  
  40.     moveq    #INTUITION_REV,d0    version
  41.     lea    int_name(pc),a1
  42.     CALLEXEC OpenLibrary
  43.     tst.l    d0
  44.     beq    exit_false        if failed then quit
  45.     move.l    d0,_IntuitionBase    else save the pointer
  46.  
  47.     moveq    #GRAPHICS_REV,d0
  48.     lea    graf_name(pc),a1
  49.     CALLEXEC OpenLibrary
  50.     tst.l    d0
  51. ;    beq    exit_closeint        if failed then close Int, exit
  52.     move.l    d0,_GfxBase
  53.     lea    MyNewScreen(pc),a0
  54.     CALLINT    OpenScreen        open a screen
  55.     tst.l    d0
  56. ;    beq    exit_closeall        if failed the close both, exit
  57.     move.l    d0,MyScreen
  58.  
  59.     move.l MyScreen,a0
  60.     lea sc_BitMap(a0),a0
  61.     lea bm_Planes(a0),a0
  62.  
  63.     
  64.     move.l #RAWSCRN,(a0)
  65.     move.l #RAWSCRN+10240,4(a0)
  66.     move.l #RAWSCRN+10240*2,8(a0)
  67.     move.l #RAWSCRN+10240*3,12(a0)
  68.     move.l #RAWSCRN+10240*4,16(a0)
  69.     move.l #RAWSCRN+10240*5,20(a0)
  70.     move.l #RAWSCRN+10240*6,24(a0)
  71.     move.l #RAWSCRN+10240*7,28(a0)
  72.  
  73. * now initialise a NewWindow structure. This is normally easier to
  74. * do with dc.w/dc.l statement etc, but for comparison with the C
  75. * version we do it like this
  76.     lea    MyNewWindow(pc),a0    good place to start
  77.     move.w    #20,nw_LeftEdge(a0)
  78.     move.w    #20,nw_TopEdge(a0)
  79.     move.w    #300,nw_Width(a0)
  80.     move.w    #100,nw_Height(a0)
  81.     move.b    #0,nw_DetailPen(a0)
  82.     move.b    #1,nw_BlockPen(a0)
  83.     move.l    #window_title,nw_Title(a0)
  84. _temp    set    WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
  85.     move.l    #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
  86.     move.l    #CLOSEWINDOW,nw_IDCMPFlags(a0)
  87.     move.w    #CUSTOMSCREEN,nw_Type(a0)
  88.     clr.l    nw_FirstGadget(a0)
  89.     clr.l    nw_CheckMark(a0)
  90.     move.l    MyScreen(pc),nw_Screen(a0)
  91.     clr.l    nw_BitMap(a0)
  92.     move.w    #100,nw_MinWidth(a0)
  93.     move.w    #25,nw_MinHeight(a0)
  94.     move.w    #640,nw_MaxWidth(a0)
  95.     move.w    #200,nw_MaxHeight(a0)
  96.  
  97. * thats it set up, now open the window (a0=NewWindow already)
  98. ;    CALLINT    OpenWindow
  99. ;    tst.l    d0
  100. ;    beq    exit_closescr            if failed
  101. ;    move.l    d0,MyWindow            save it
  102. ;
  103. ;    move.l    d0,a1                window
  104. ;    move.l    wd_RPort(a1),a1            rastport
  105. ;    moveq    #20,d0                X
  106. ;    moveq    #20,d1                Y
  107. ;    CALLGRAF Move                move the cursor
  108. ;
  109. ;    move.l    MyWindow(pc),a0
  110. ;    move.l    wd_RPort(a0),a1            rastport
  111. ;    lea    hello_message(pc),a0
  112. ;    moveq    #11,d0
  113. ;    CALLGRAF Text                print something
  114. ;
  115. ;    move.l    MyWindow(pc),a0
  116. ;    move.l    wd_UserPort(a0),a0
  117. ;    move.b    MP_SIGBIT(a0),d1        (misprint in manual)
  118. ;    moveq    #0,d0
  119. ;    bset    d1,d0                do a shift
  120. ;    CALLEXEC Wait
  121.  
  122. ;    moveq    #0,d4                return code
  123.  
  124. * various exit routines that do tidying up, given a return code in d4
  125.  
  126. ;    move.l    MyWindow(pc),a0
  127. ;    CALLINT CloseWindow
  128.  
  129. ;exit_closescr
  130. ;    move.l    MyScreen(pc),a0
  131. ;    CALLINT CloseScreen
  132.  
  133. ;exit_closeall
  134. ;    move.l    _GfxBase(pc),a1
  135. ;    CALLEXEC CloseLibrary
  136.  
  137. ;exit_closeint
  138. ;    move.l    _IntuitionBase(pc),a1
  139. ;    CALLEXEC CloseLibrary
  140.  
  141. ;done:
  142. ;    bra done
  143.  
  144. SPECULAR EQU SP
  145. SPECMAP EQU SPM
  146. BUMPSPEC EQU BS
  147. BUMPPHONG EQU BP
  148. SHADOWMAP EQU SH
  149. SHADING EQU PH
  150. MOTIONBLUR EQU MB
  151.  
  152.  
  153.  move.l #PALETTEBIT,a0
  154.  move.l #COPIEDPAL+4,a1
  155.  move.w #255,d0
  156.  
  157. copydown:
  158.  move.b 1(a0),(a1)
  159.  move.b 3(a0),4(a1)
  160.  move.b 5(a0),8(a1)
  161.  add.w #6,a0
  162.  add.w #12,a1
  163.  dbra d0,copydown
  164.  
  165.  move.w #256,COPIEDPAL
  166.  move.w #0,COPIEDPAL+2
  167. LOOKFORME:
  168.  move.l MyScreen,a0
  169.  lea sc_ViewPort(a0),a0
  170.  move.l #COPIEDPAL,a1
  171.  move.l _GfxBase,a6
  172.  jsr -$372(a6)
  173.  
  174.  move.l MyScreen,a4
  175.  move.w sc_MouseX(a4),d0
  176.  move.w sc_MouseY(a4),d1
  177.  move.w d0,OLDXM
  178.  move.w d1,OLDYM
  179.     
  180.  move.l 4.w,a6
  181.  move.l #doslibname,a1
  182.  moveq #0,d0
  183.  jsr -552(a6)
  184.  move.l d0,doslib
  185.  
  186.  move.l doslib,a6
  187.  move.l #OBJNAME,d1
  188.  move.l #1005,d2
  189.  jsr -30(a6)
  190.  move.l d0,ROTATEDPTS
  191.  
  192.  move.l doslib,a6
  193.  move.l d0,d1
  194.  move.l #POLYGONDATA,d2
  195.  move.l #30000,d3
  196.  jsr -42(a6)
  197.  
  198.  move.l doslib,a6
  199.  move.l ROTATEDPTS,d1
  200.  jsr -36(a6)
  201.  
  202. loop:
  203.  
  204.  move.w #0,temp
  205.  
  206.  move.l #POLYGONDATA,a3
  207.  move.w (a3)+,SORTIT
  208.  move.l a3,START_OF_OBJECT
  209.     
  210.  move.w (a3)+,num_points
  211.  move.w (a3)+,d6
  212.  move.w d6,num_frames
  213.  move.l a3,POINTER_TO_POINTERS
  214.  lea (a3,d6.w*4),a3
  215.  move.l a3,LinesPtr
  216.  moveq #0,d5
  217.  moveq #0,d2
  218.  
  219.  move.l POINTER_TO_POINTERS,a4
  220.  move.w (a4,d5.w*4),d2
  221.  add.l START_OF_OBJECT,d2
  222.  move.l d2,PtsPtr
  223.  move.w 2(a4,d5.w*4),d5
  224.  add.l START_OF_OBJECT,d5
  225.  move.l d5,PolyAngPtr
  226.  move.l d2,a3
  227.  move.w num_points,d5
  228.  
  229.  move.l (a3)+,OBJONOFF
  230.  
  231.  move.l a3,PointAngPtr
  232.  add.w d5,d5
  233.  move.w d5,d2
  234.  add.w d5,d5
  235.  add.w d5,d2
  236.  add.w d2,a3
  237.  move.l a3,PtsPtr
  238.  
  239.  move.l MyScreen,a4
  240.  move.w sc_MouseX(a4),d0
  241.  move.w sc_MouseY(a4),d1
  242.  
  243.  sub.w OLDXM,d0
  244.  sub.w OLDYM,d1
  245.  add.w d0,OLDXM
  246.  add.w d1,OLDYM
  247.  
  248.  btst #6,$bfe001
  249.  beq.s .SHIFTABOUT
  250.  
  251.  muls #8190,d0
  252.  divs #320,d0
  253.  add.w d0,YANG
  254.  and.w #8190,YANG
  255.  muls #8190,d1
  256.  divs #320,d1
  257.  and.w #8190,d1
  258.  add.w d1,XANG
  259.  and.w #8190,XANG
  260.  
  261. ; add.w #40,AANG
  262. ; add.w #70,BANG
  263. ; and.w #8191,AANG
  264. ; and.w #8191,BANG
  265.  
  266. ; add.w #60,CANG
  267. ; add.w #90,DANG
  268. ; and.w #8191,CANG
  269. ; and.w #8191,DANG
  270.  
  271.  
  272.  bra .ROTABOUT
  273. .SHIFTABOUT
  274.  
  275.   muls #8190,d0
  276.  divs #320,d0
  277.  add.w d0,BANG
  278.  and.w #8190,BANG
  279.  muls #8190,d1
  280.  divs #320,d1
  281.  and.w #8190,d1
  282.  add.w d1,AANG
  283.  and.w #8190,AANG
  284.  
  285.  
  286. .ROTABOUT
  287.  
  288.  move.w AANG,d1
  289.  move.w BANG,d3
  290. ; cmp.w #2,d6
  291. ; bne.s .notsecrot
  292. ; move.w CANG,d1
  293. ; move.w DANG,d3
  294. ;.notsecrot
  295.  move.l #SINETABLE,a1
  296.  move.w (a1,d1.w),XSIN    ;xsin
  297.  move.w (a1,d3.w),YSIN    ;ysin
  298.  
  299.  add.w #2048,a1
  300.  move.w (a1,d1.w),XCOS    ;xcos
  301.  move.w (a1,d3.w),YCOS    ;ycos
  302.  
  303.  move.w XANG,d1
  304.  move.w YANG,d3
  305. ; cmp.w #2,d6
  306. ; bne.s .notsecrot
  307. ; move.w CANG,d1
  308. ; move.w DANG,d3
  309. ;.notsecrot
  310.  move.l #SINETABLE,a1
  311.  move.w (a1,d1.w),XSIN2    ;xsin
  312.  move.w (a1,d3.w),YSIN2    ;ysin
  313.  
  314.  add.w #2048,a1
  315.  move.w (a1,d1.w),XCOS2    ;xcos
  316.  move.w (a1,d3.w),YCOS2    ;ycos
  317.  
  318.  
  319. ************************************************
  320. ************************************************
  321. ************************************************
  322. ************************************************
  323. ************************************************
  324. ************************************************
  325. ************************************************
  326. ************************************************
  327. ************************************************
  328. ************************************************
  329. ************************************************
  330. ************************************************
  331. ************************************************
  332. ************************************************
  333.  
  334. *SHADOW BUFFER CALCULATION
  335.  
  336.  
  337. ; First, calculate the normal brightnesses
  338. ; for points. NB: -1,-1,-1 = this point not used
  339. ; in gouraud shading.
  340.  
  341.  move.l #NORMBRIGHTS,a2
  342.  move.l PointAngPtr,a0
  343.  move.w num_points,d7
  344.  
  345.  move.l #NORMVECTS,a5
  346.  
  347.  subq #1,d7
  348.  
  349. CALCNORMBRIGHTS:
  350.  
  351.  move.w (a0)+,d0
  352.  move.w (a0)+,d1
  353.  move.w (a0)+,d2
  354.  
  355.  move.w #0,d6
  356.  
  357.  cmp.w #-1,d0
  358.  bne.s .notnot
  359.  cmp.w #-1,d1
  360.  bne.s .notnot
  361.  cmp.w #-1,d2
  362.  bne.s .notnot
  363.  
  364.  move.w #-1,x1
  365.  move.w #-1,y1
  366.  move.w #-1,z1
  367.  bra .dontbother
  368.  
  369. .notnot:
  370.  neg.w d1
  371.  
  372.  move.w d0,d3
  373.  move.w d2,d5
  374.  
  375.  muls YCOS,d0
  376.  muls YSIN,d2
  377.  sub.l d2,d0
  378.  add.l d0,d0
  379.  swap d0
  380. ; asr.l #6,d0    ; new x*512
  381.  
  382.  muls YSIN,d3
  383.  muls YCOS,d5
  384.  add.l d5,d3
  385.  add.l d3,d3
  386.  swap d3
  387.  move.w d3,d2    ; new z
  388.  
  389.  move.w d1,d4
  390.  move.w d2,d5
  391.  muls XCOS,d1
  392.  muls XSIN,d2
  393.  sub.l d2,d1
  394.  add.l d1,d1
  395.  swap d1
  396.  
  397.  muls XSIN,d4
  398.  muls XCOS,d5
  399.  add.l d5,d4
  400.  add.l d4,d4
  401.  swap d4
  402.  move.w d4,d2    ; new z
  403.  
  404.  
  405.  move.w d0,d3
  406.  move.w d2,d5
  407.  
  408.  muls YCOS2,d0
  409.  muls YSIN2,d2
  410.  sub.l d2,d0
  411.  add.l d0,d0
  412.  swap d0
  413.  
  414.  muls YSIN2,d3
  415.  muls YCOS2,d5
  416.  add.l d5,d3    
  417.  add.l d3,d3
  418.  swap d3
  419.  move.w d3,d2    ; new z
  420.  
  421.  move.w d1,d4
  422.  move.w d2,d5
  423.  muls XCOS2,d1
  424.  muls XSIN2,d2
  425.  sub.l d2,d1
  426.  add.l d1,d1
  427.  swap d1
  428.  
  429.  muls XSIN2,d4
  430.  muls XCOS2,d5
  431.  add.l d5,d4
  432.  add.l d4,d4
  433.  swap d4
  434.  
  435.  move.w d0,x1
  436.  move.w d1,y1
  437.  move.w d4,z1
  438.  
  439.  tst.w y1
  440.  blt.s .okpos
  441.  
  442.  move.w x1,d1    ; 0-1024
  443.  asr.w #4,d1    ; 0-64
  444.  move.w z1,d2    ; 0-1024
  445.  asr.w #4,d2    ; 0-64
  446.  
  447.  muls d1,d1
  448.  muls d2,d2
  449.  add.l d1,d2
  450.  jsr CALCSQROOT
  451.  tst.w d2
  452.  beq.s .okpos
  453.  
  454.  move.w d2,d3    ; 0-64
  455.  neg.w d3
  456.  add.w #127,d3    ; 64-127
  457.  
  458.  move.w z1,d4
  459.  muls d3,d4
  460.  divs d2,d4
  461.  
  462.  move.w x1,d0
  463.  muls d3,d0
  464.  divs d2,d0
  465.  
  466. ; asr.w #1,d4
  467. ; asr.w #1,d0
  468.  
  469. ; neg.w y3
  470.  
  471. .okpos
  472.  
  473.  asr.w #4,d4
  474.  add.w #128,d4
  475.  move.b d4,d6
  476.  lsl.w #8,d6
  477.  asr.w #4,d0
  478.  add.w #128,d0
  479.  move.b d0,d6
  480.  
  481. ; move.w d1,d6    ; new y 
  482. ;
  483. ; asr.w #4,d6
  484. ; add.w #20,d6
  485. ; ble.s .okokok
  486. ; moveq #0,d6
  487. ;.okokok:
  488. ; add.w #$1c,d6
  489. ; cmp.w #1,d6
  490. ; bge.s .okokokok
  491. ; moveq #1,d6
  492. ;.okokokok:
  493.  
  494. ; add.w #64,d6
  495. ; cmp.w #28,d6
  496. ; blt.s .okbig
  497. ; move.w #28,d6
  498. ;.okbig
  499.  
  500. .dontbother:
  501.  move.w x1,(a5)+
  502.  move.w y1,(a5)+
  503.  move.w z1,(a5)+
  504.  move.w d6,(a2)+
  505.  
  506.  dbra d7,CALCNORMBRIGHTS
  507.  
  508.  
  509. ; Next, calculate the point coords for
  510. ; the shadow buffer.
  511.  
  512.  move.l #SHADOWPTS,a2
  513.  move.l PtsPtr,a0
  514.  move.w num_points,d7
  515.  subq #1,d7
  516.  
  517. ROTPTLOPSHAD:
  518.  move.w (a0)+,d0
  519.  move.w d0,d3
  520.  move.w (a0)+,d1
  521.  move.w (a0)+,d2
  522.  move.w d2,d5
  523.  
  524.  muls YCOS,d0
  525.  muls YSIN,d2
  526.  sub.l d2,d0
  527.  add.l d0,d0
  528.  swap d0
  529. ; asr.l #6,d0    ; new x*512
  530.  
  531.  muls YSIN,d3
  532.  muls YCOS,d5
  533.  add.l d5,d3
  534.  add.l d3,d3
  535.  swap d3
  536.  move.w d3,d2    ; new z
  537.  
  538.  move.w d1,d4
  539.  move.w d2,d5
  540.  muls XCOS,d1
  541.  muls XSIN,d2
  542.  sub.l d2,d1
  543.  add.l d1,d1
  544.  swap d1
  545.  
  546.  muls XSIN,d4
  547.  muls XCOS,d5
  548.  add.l d5,d4
  549.  add.l d4,d4
  550.  swap d4
  551.  move.w d4,d2    ; new z
  552.   
  553.  move.w d0,d3
  554.  move.w d2,d5
  555.  
  556.  muls YCOS2,d0
  557.  muls YSIN2,d2
  558.  sub.l d2,d0
  559.  asr.l #6,d0    ; new x*512
  560.  
  561.  muls YSIN2,d3
  562.  muls YCOS2,d5
  563.  add.l d5,d3
  564.  add.l d3,d3
  565.  swap d3
  566.  move.w d3,d2    ; new z
  567.  
  568.  move.w d1,d4
  569.  move.w d2,d5
  570.  muls XCOS2,d1
  571.  muls XSIN2,d2
  572.  sub.l d2,d1
  573.  asr.l #6,d1    ; new y*512
  574.  
  575.  muls XSIN2,d4
  576.  muls XCOS2,d5
  577.  add.l d5,d4
  578.  add.l d4,d4
  579.  swap d4
  580.  move.w d4,d2    ; new z
  581.  
  582.  ext.l d2
  583.  
  584.  move.w XOFF,d5
  585.  ext.l d5
  586.  asl.l #8,d5
  587.  add.l d5,d5
  588.  add.l d5,d0
  589.  
  590.  move.l d0,(a2)+
  591.  move.l d1,(a2)+
  592.  move.w d2,(a2)+
  593.  
  594.  dbra d7,ROTPTLOPSHAD
  595.  
  596.  
  597.  
  598. ***************************************
  599. * Calculate viewer position for specularity..
  600.  
  601.  move.w #0,d0
  602.  move.w #0,d1
  603.  move.w #-1024,d2
  604.  
  605. ; move.w d0,d3
  606. ; move.w d2,d5
  607. ;
  608. ; muls YCOS,d0
  609. ; muls YSIN,d2
  610. ; sub.l d2,d0
  611. ; add.l d0,d0
  612. ; swap d0
  613. ; asr.l #6,d0    ; new x*512
  614. ; muls YSIN,d3
  615. ; muls YCOS,d5
  616. ; add.l d5,d3
  617. ; add.l d3,d3
  618. ; swap d3
  619. ; move.w d3,d2    ; new z
  620. ;
  621. ; move.w d1,d4
  622. ; move.w d2,d5
  623. ; muls XCOS,d1
  624. ; muls XSIN,d2
  625. ; sub.l d2,d1
  626. ; add.l d1,d1
  627. ; swap d1
  628. ; muls XSIN,d4
  629. ; muls XCOS,d5
  630. ; add.l d5,d4
  631. ; add.l d4,d4
  632. ; swap d4
  633. ; move.w d4,d2    ; new z
  634.  
  635.  move.w d0,d3
  636.  move.w d2,d5
  637.  
  638.  muls YCOS2,d0
  639.  muls YSIN2,d2
  640.  sub.l d2,d0
  641.  add.l d0,d0
  642.  swap d0
  643.  
  644.  muls YSIN2,d3
  645.  muls YCOS2,d5
  646.  add.l d5,d3    
  647.  add.l d3,d3
  648.  swap d3
  649.  move.w d3,d2    ; new z
  650.  
  651.  move.w d1,d4
  652.  move.w d2,d5
  653.  muls XCOS2,d1
  654.  muls XSIN2,d2
  655.  sub.l d2,d1
  656.  add.l d1,d1
  657.  swap d1
  658. ; asr.l #6,d1    ; new y*512
  659.  
  660.  muls XSIN2,d4
  661.  muls XCOS2,d5
  662.  add.l d5,d4
  663.  add.l d4,d4
  664.  swap d4
  665.  
  666.  move.w d0,x2b
  667.  move.w d1,y2b
  668.  move.w d4,z2b
  669.  
  670. ; Now the specular highlight efforts....
  671.  
  672.  move.l #SPECBRIGHTS,a2
  673.  move.l #NORMVECTS,a1
  674.  
  675.  move.l #SHADOWPTS,a5
  676.  
  677.  move.w num_points,d7
  678.  subq #1,d7
  679.  
  680. CALCSPECBRIGHTS:
  681.  
  682.  move.w (a1)+,x1
  683.  move.w (a1)+,y1
  684.  move.w (a1)+,z1
  685.  
  686.  move.w x2b,d0
  687.  move.l (a5)+,d1
  688.  asr.l #8,d1
  689.  asr.l #1,d1
  690.  sub.w d1,d0
  691.  move.w d0,x2
  692.  move.w y2b,d0
  693.  move.l (a5)+,d1
  694.  asr.l #8,d1
  695.  asr.l #1,d1
  696.  sub.w d1,d0
  697.  move.w d0,y2
  698.  move.w z2b,d0
  699.  sub.w (a5)+,d0
  700.  move.w d0,z2
  701.  
  702.  move.w #0,d6
  703.  
  704.  cmp.w #-1,x1
  705.  bne.s .notnot
  706.  cmp.w #-1,y1
  707.  bne.s .notnot
  708.  cmp.w #-1,z1
  709.  beq .dontbother
  710. .notnot: 
  711.  
  712.  move.w x2,d2
  713.  muls d2,d2
  714.  move.w y2,d1
  715.  muls d1,d1
  716.  add.l d1,d2
  717.  move.w z2,d1
  718.  muls d1,d1
  719.  add.l d1,d2
  720.  
  721.  jsr CALCSQROOT
  722.  
  723.  move.w d2,l2
  724.  
  725.  move.w y1,d0
  726.  muls z2,d0
  727.  move.w y2,d1
  728.  muls z1,d1
  729.  sub.l d1,d0    ; x4
  730.  
  731.  move.w z1,d1
  732.  muls x2,d1
  733.  move.w z2,d2
  734.  muls x1,d2
  735.  sub.l d2,d1    ; y4
  736.  
  737.  move.w x1,d2
  738.  muls y2,d2
  739.  move.w x2,d3
  740.  muls y1,d3
  741.  sub.l d3,d2    ; z4
  742.  
  743.  asr.l #8,d0
  744.  asr.l #8,d1
  745.  asr.l #8,d2
  746.  asr.l #2,d0
  747.  asr.l #2,d1
  748.  asr.l #2,d2
  749.  
  750.  move.w x1,d3
  751.  muls d1,d3
  752.  move.w y1,d4
  753.  muls d0,d4
  754.  sub.l d4,d3
  755.  asr.l #8,d3
  756.  asr.l #1,d3
  757.  add.w z2,d3
  758.  
  759.  muls #1024,d3
  760.  divs l2,d3
  761.  
  762.  move.w d3,z3
  763.  
  764.  move.w y1,d3
  765.  muls d2,d3
  766.  move.w z1,d4
  767.  muls d1,d4
  768.  sub.l d4,d3
  769.  asr.l #8,d3
  770.  asr.l #1,d3
  771.  add.w x2,d3
  772.  muls #1024,d3
  773.  divs l2,d3
  774.  
  775.  move.w d3,x3
  776.  
  777.  move.w z1,d3
  778.  muls d0,d3
  779.  move.w x1,d4
  780.  muls d2,d4
  781.  sub.l d4,d3
  782.  asr.l #8,d3
  783.  asr.l #1,d3
  784.  add.w y2,d3
  785.  muls #1024,d3
  786.  divs l2,d3
  787.  
  788.  move.w d3,y3
  789.  
  790.  move.w z3,d3
  791.  asr.w #4,d3
  792.  add.w #128,d3
  793.  
  794.  move.b d3,d6
  795.  lsl.w #8,d6
  796.  
  797.  move.w x3,d3
  798.  asr.w #4,d3
  799.  add.w #128,d3
  800.  move.b d3,d6
  801.   
  802.  tst.w y3
  803.  blt.s .okpos
  804.  
  805.  move.w x3,d1
  806.  asr.w #4,d1
  807.  move.w z3,d2
  808.  asr.w #4,d2
  809.  
  810.  muls d1,d1
  811.  muls d2,d2
  812.  add.l d1,d2
  813.  jsr CALCSQROOT
  814.  tst.w d2
  815.  beq.s .okpos
  816.  
  817.  move.w d2,d3
  818.  neg.w d3
  819.  add.w #127,d3
  820.  
  821.  move.w z3,d4
  822.  muls d3,d4
  823.  divs d2,d4
  824.  asr.w #4,d4
  825.  add.w #128,d4
  826.  move.b d4,d6
  827.  lsl.w #8,d6
  828.  
  829.  move.w x3,d4
  830.  muls d3,d4
  831.  divs d2,d4
  832.  asr.w #4,d4
  833.  add.w #128,d4
  834.  move.b d4,d6
  835.  
  836. ; neg.w y3
  837.  
  838. .okpos
  839.   
  840. ; add.w y2,d3
  841. ;
  842. ; move.w d3,d6
  843. ;
  844. ; asr.w #4,d6
  845. ; add.w #30,d6
  846. ; ble.s .okokok
  847. ; moveq #0,d6
  848. ;.okokok:
  849. ; add.w #$1c,d6
  850. ;
  851. ; cmp.w #1,d6
  852. ; bge.s .okokokok
  853. ; moveq #1,d6
  854. ;.okokokok:
  855.  
  856. ; cmp.w #28,d6
  857. ; blt.s .okbig
  858. ; move.w #28,d6
  859. ;.okbig
  860.  
  861. .dontbother:
  862.  move.w d6,(a2)+
  863.  move.w y3,(a2)+
  864.  
  865.  dbra d7,CALCSPECBRIGHTS
  866.  
  867.  
  868.  
  869.  
  870. * NOW THE POINTS FOR ON-SCREENNESS
  871.  
  872.  move.l #ROTATEDPTS,a2
  873.  move.l PtsPtr,a0
  874.  move.w num_points,d7
  875.  subq #1,d7
  876.  
  877. ROTPTLOP:
  878.  
  879.  move.w (a0)+,d0
  880.  move.w d0,d3
  881.  move.w (a0)+,d1
  882.  move.w (a0)+,d2
  883.  move.w d2,d5
  884.  
  885.  
  886.  
  887.  muls YCOS,d0
  888.  muls YSIN,d2
  889.  sub.l d2,d0
  890.  asr.l #6,d0    ; new x*512
  891.  
  892.  muls YSIN,d3
  893.  muls YCOS,d5
  894.  add.l d5,d3
  895.  add.l d3,d3
  896.  swap d3
  897.  move.w d3,d2    ; new z
  898.  
  899.  move.w d1,d4
  900.  move.w d2,d5
  901.  muls XCOS,d1
  902.  muls XSIN,d2
  903.  sub.l d2,d1
  904.  asr.l #6,d1    ; new y*512
  905.  
  906.  muls XSIN,d4
  907.  muls XCOS,d5
  908.  add.l d5,d4
  909.  add.l d4,d4
  910.  swap d4
  911.  move.w d4,d2    ; new z
  912.  
  913.  ext.l d2
  914.  
  915.  move.w XOFF,d5
  916.  ext.l d5
  917.  asl.l #8,d5
  918.  add.l d5,d5
  919.  add.l d5,d0
  920.  
  921.  move.l d0,(a2)+
  922.  move.l d1,(a2)+
  923.  move.w d2,(a2)+
  924.  
  925.  dbra d7,ROTPTLOP
  926.  
  927. ; Now convert the rotated points to the screen:
  928.  
  929.  move.l #ROTATEDPTS,a0
  930.  move.l #ONSCREENPTS,a2
  931.  move.w num_points,d7
  932.  subq #1,d7
  933. CONVERTTOSCREEN:
  934.  move.l (a0)+,d0
  935.  move.l (a0)+,d1
  936.  move.w (a0)+,d2
  937. ; asr.w #1,d2
  938.  
  939.  add.w ZOFF,d2
  940.  ext.l d2
  941.  
  942.  move.l d0,d3
  943.  asr.l #1,d3
  944.  add.l d3,d0 
  945.  move.l d1,d3
  946.  asr.l #1,d3
  947.  add.l d3,d1 
  948.  
  949.  divs d2,d0
  950.  divs d2,d1
  951.  add.w #160*4,d0
  952.  add.w #128*4,d1
  953.  move.w d0,(a2)+
  954.  move.w d1,(a2)+
  955.  dbra d7,CONVERTTOSCREEN
  956.  
  957.  move.w #254,HIGHPOLY
  958.  
  959.  move.l LinesPtr,a1
  960.  move.l #PartBuffer,a0
  961.  move.l a0,a2
  962.  move.w #15,d0
  963. clrpartbuffSHAD:
  964.  move.l #$80000001,(a2)+
  965.  move.l #$80000001,(a2)+
  966.  move.l #$80000001,(a2)+
  967.  move.l #$80000001,(a2)+
  968.  dbra d0,clrpartbuffSHAD
  969.  
  970.  move.l #SHADOWPTS,a2
  971.  move.l OBJONOFF,d5
  972.  
  973.  move.w #0,d4
  974.  tst.w SORTIT
  975.  bne.s PutInPartsSHAD
  976.  
  977.  
  978. putinunsortedSHAD:
  979.  move.w (a1)+,d7
  980.  blt doneallpartsSHAD
  981.  lsr.l #1,d5
  982.  bcs.s .yeson
  983.  addq #2,a1
  984.  bra putinunsortedSHAD
  985. .yeson:
  986.  
  987.  move.w (a1)+,d6
  988.  move.l #0,(a0)+
  989.  move.w d7,(a0)+
  990.  move.w d4,(a0)+
  991.  addq #1,d4
  992.  bra putinunsortedSHAD
  993.  
  994. PutInPartsSHAD
  995.  move.w (a1)+,d7
  996.  blt doneallpartsSHAD
  997.  
  998.  lsr.l #1,d5
  999.  bcs.s .yeson
  1000.  addq #2,a1
  1001.  bra PutInPartsSHAD
  1002. .yeson:
  1003.  
  1004.  move.w (a1)+,d6
  1005.  move.l 4(a2,d6.w),d0
  1006.  add.l #200000,d0
  1007.  
  1008.  move.l #PartBuffer-8,a0
  1009.  
  1010. stillfrontSHAD
  1011.  addq #8,a0
  1012.  cmp.l (a0),d0
  1013.  blt stillfrontSHAD
  1014.  move.l #endparttab-8,a5
  1015. domoreshiftSHAD:
  1016.  move.l -8(a5),(a5)
  1017.  move.l -4(a5),4(a5)
  1018.  subq #8,a5
  1019.  cmp.l a0,a5
  1020.  bgt.s domoreshiftSHAD
  1021.  
  1022.  move.l d0,(a0)
  1023.  move.w d7,4(a0)
  1024.  move.w d4,6(a0)
  1025.  addq #1,d4
  1026.  bra PutInPartsSHAD
  1027.  
  1028. doneallpartsSHAD:
  1029.  
  1030.  move.l #PartBuffer,a0
  1031.  
  1032.  ifne SHADOWMAP
  1033.  
  1034. PartLoopSHAD
  1035.  move.l (a0)+,d7
  1036.  blt nomorepartsSHAD
  1037.  
  1038.  move.l #SAVEHIGHS,a2
  1039.  move.w 2(a0),d0
  1040.  move.w HIGHPOLY,(a2,d0.w*2)
  1041.  
  1042.  moveq #0,d0
  1043.  move.w (a0),d0
  1044.  addq #4,a0
  1045.  add.l START_OF_OBJECT,d0
  1046.  move.l d0,a1
  1047.  
  1048. polylooSHAD:
  1049.  
  1050.  tst.w (a1)
  1051.  blt.s nomorepolysSHAD
  1052.  movem.l a0/a1/d7,-(a7)
  1053.  bsr doaSHADEpoly
  1054.  movem.l (a7)+,a0/a1/d7
  1055.  
  1056.  move.w (a1),d0
  1057.  lea 18(a1,d0.w*4),a1
  1058.  
  1059.  bra.s polylooSHAD
  1060. nomorepolysSHAD:
  1061.  sub.w #1,HIGHPOLY
  1062.  bra PartLoopSHAD
  1063. nomorepartsSHAD:
  1064.  
  1065.  endc
  1066.  
  1067. *******************************************
  1068. * Now the on-screen bit...
  1069. *******************************************
  1070.  
  1071.  move.l LinesPtr,a1
  1072.  move.l #PartBuffer,a0
  1073.  move.l a0,a2
  1074.  move.w #15,d0
  1075. clrpartbuff:
  1076.  move.l #$80000001,(a2)+
  1077.  move.l #$80000001,(a2)+
  1078.  move.l #$80000001,(a2)+
  1079.  move.l #$80000001,(a2)+
  1080.  dbra d0,clrpartbuff
  1081.  
  1082.  move.l #ROTATEDPTS,a2
  1083.  move.l OBJONOFF,d5
  1084.  
  1085.  moveq #0,d4
  1086.  
  1087.  tst.w SORTIT
  1088.  bne.s PutInParts
  1089.  
  1090. putinunsorted:
  1091.  move.w (a1)+,d7
  1092.  blt doneallparts
  1093.  lsr.l #1,d5
  1094.  bcs.s .yeson
  1095.  addq #2,a1
  1096.  bra putinunsorted
  1097. .yeson:
  1098.  
  1099.  move.w (a1)+,d6
  1100.  move.l #0,(a0)+
  1101.  move.w d7,(a0)+
  1102.  move.w d4,(a0)+
  1103.  
  1104.  addq #1,d4
  1105.  bra putinunsorted
  1106.  
  1107. PutInParts
  1108.  move.w (a1)+,d7
  1109.  blt doneallparts
  1110.  
  1111.  lsr.l #1,d5
  1112.  bcs.s .yeson
  1113.  addq #2,a1
  1114.  bra PutInParts
  1115. .yeson:
  1116.  
  1117.  move.w (a1)+,d6
  1118.  move.l (a2,d6.w),d0
  1119.  asr.l #8,d0
  1120.  asr.l #2,d0
  1121.  muls d0,d0
  1122.  move.l 4(a2,d6.w),d2
  1123.  asr.l #8,d2
  1124.  asr.l #2,d2
  1125.  muls d2,d2
  1126.  add.l d2,d0 
  1127.  move.w 8(a2,d6.w),d2
  1128.  add.w #1024,d2
  1129.  muls d2,d2
  1130.  add.l d2,d0
  1131.  
  1132.  move.l #PartBuffer-8,a0
  1133.  
  1134. stillfront
  1135.  addq #8,a0
  1136.  cmp.l (a0),d0
  1137.  blt stillfront
  1138.  move.l #endparttab-8,a5
  1139. domoreshift:
  1140.  move.l -8(a5),(a5)
  1141.  move.l -4(a5),4(a5)
  1142.  subq #8,a5
  1143.  cmp.l a0,a5
  1144.  bgt.s domoreshift
  1145.  
  1146.  move.l d0,(a0)
  1147.  move.w d7,4(a0)
  1148.  move.w d4,6(a0)
  1149.  addq #1,d4
  1150.  bra PutInParts
  1151.  
  1152. doneallparts:
  1153.  
  1154.  move.l #PartBuffer,a0
  1155.  
  1156. PartLoop
  1157.  move.l (a0)+,d7
  1158.  blt nomoreparts
  1159.  
  1160.  move.l #SAVEHIGHS,a2
  1161.  move.w 2(a0),d0
  1162.  move.w (a2,d0.w*2),HIGHPOLY
  1163.  
  1164.  moveq #0,d0
  1165.  move.w (a0),d0
  1166.  addq #4,a0
  1167.  add.l START_OF_OBJECT,d0
  1168.  move.l d0,a1
  1169.  
  1170. polyloo:
  1171.  
  1172.  tst.w (a1)
  1173.  blt.s nomorepolys
  1174.  movem.l a0/a1/d7,-(a7)
  1175.  bsr doapoly
  1176.  movem.l (a7)+,a0/a1/d7
  1177.  
  1178.  move.w (a1),d0
  1179.  lea 18(a1,d0.w*4),a1
  1180.  
  1181.  bra.s polyloo
  1182. nomorepolys:
  1183.  sub.w #1,HIGHPOLY
  1184.  bra PartLoop
  1185. nomoreparts:
  1186.  
  1187. NOPOLYS:
  1188.  
  1189. ; btst #6,$bfe001
  1190. ; beq.s .SHOWSHADOW
  1191.  
  1192.  ifne MOTIONBLUR
  1193.  
  1194.  move.l FASTBUFFER,d0
  1195.  cmp.l #fasty,d0
  1196.  bne .SHOWNSCRN
  1197.  
  1198.  move.l #fasty,a0
  1199.  move.l #fasty2,a1
  1200.  add.l #40*320+64,a0
  1201.  add.l #40*320+64,a1
  1202.  move.l #BLUR,a2
  1203.  move.w #175,d0
  1204.  moveq #0,d6
  1205. .blurchunk:
  1206.  move.w #(192/4)-1,d1
  1207. .blurline:
  1208.  
  1209.  move.l (a0),d2
  1210.  move.l d2,d4
  1211.  swap d4
  1212.  move.l (a1)+,d3
  1213.  move.l d3,d5
  1214.  swap d5
  1215.   
  1216.  lsr.w #8,d5
  1217.  move.b d5,d4
  1218.  move.w d4,d6
  1219.  move.b (a2,d6.l),d7
  1220.  
  1221.  lsl.l #8,d7
  1222.  lsl.l #8,d2
  1223.  lsl.l #8,d3
  1224.  move.l d2,d4
  1225.  move.l d3,d5
  1226.  swap d4
  1227.  swap d5
  1228.  lsr.w #8,d5
  1229.  move.b d5,d4
  1230.  move.w d4,d6
  1231.  move.b (a2,d6.l),d7
  1232.  
  1233.  lsl.l #8,d7
  1234.  lsl.l #8,d2
  1235.  lsl.l #8,d3
  1236.  move.l d2,d4
  1237.  move.l d3,d5
  1238.  swap d4
  1239.  swap d5
  1240.  lsr.l #8,d5
  1241.  move.b d5,d4
  1242.  move.w d4,d6
  1243.  move.b (a2,d6.l),d7
  1244.  
  1245.  lsl.l #8,d7
  1246.  lsl.l #8,d2
  1247.  lsl.l #8,d3
  1248.  move.l d2,d4
  1249.  move.l d3,d5
  1250.  swap d4
  1251.  swap d5
  1252.  lsr.l #8,d5
  1253.  move.b d5,d4
  1254.  move.w d4,d6
  1255.  move.b (a2,d6.l),d7
  1256.  
  1257.  move.l d7,(a0)+
  1258.  
  1259.  dbra d1,.blurline
  1260.  
  1261.  add.w #(320-192),a1
  1262.  add.w #(320-192),a0
  1263.  dbra d0,.blurchunk
  1264.  
  1265.  endc
  1266.  
  1267.  ifeq LARGESCREEN
  1268.  
  1269.  move.l FASTBUFFER,a0 
  1270.  add.l #40*320+64,a0
  1271.  move.l #RAWSCRN,a1
  1272.  add.l #40*40+8,a1
  1273.  move.l #(24)-1,d0
  1274.  move.l #175,d1
  1275.  move.w #128,d2
  1276.  move.w #16,d3
  1277.  moveq #0,d4
  1278.  moveq #0,d5
  1279.  jsr CHUNKYTOPLANAR 
  1280.  
  1281.  endc
  1282.  
  1283.  ifne LARGESCREEN
  1284.  
  1285.  move.l FASTBUFFER,a0 
  1286.  move.l #RAWSCRN,a1
  1287.  move.l #39,d0
  1288.  move.l #255,d1
  1289.  move.w #0,d2
  1290.  move.w #0,d3
  1291.  moveq #0,d4
  1292.  moveq #0,d5
  1293.  jsr CHUNKYTOPLANAR 
  1294.  
  1295.  endc
  1296.  
  1297.  
  1298.  bra .SHOWNSCRN
  1299.  
  1300. .SHOWSHADOW
  1301.  
  1302.  move.l #SHADOWBUFFER,a0
  1303.  add.l #40*256,a0
  1304.  move.l #RAWSCRN,a1
  1305.  add.l #40*40,a1
  1306.  move.l #(256/8)-1,d0
  1307.  move.l #175,d1
  1308.  move.w #0,d2
  1309.  move.w #8,d3
  1310.  moveq #0,d4
  1311.  moveq #0,d5
  1312.  jsr CHUNKYTOPLANAR 
  1313.  
  1314. .SHOWNSCRN:
  1315.  
  1316.  ifne MOTIONBLUR
  1317.  
  1318.  move.l #fasty2,d1
  1319.  move.l FASTBUFFER,d0
  1320.  cmp.l #fasty,d0
  1321.  beq.s .ok2
  1322.  move.l #fasty,d1
  1323. .ok2:
  1324.  move.l d1,FASTBUFFER 
  1325.  
  1326.  endc
  1327.  
  1328.  move.l FASTBUFFER,a0
  1329.  move.l #NEBBIE,a1
  1330.  ifeq LARGESCREEN
  1331.  add.l #40*320+64,a0
  1332.  endc
  1333.  
  1334.  move.l #BLUR,a2
  1335.  ifeq LARGESCREEN
  1336.  moveq #0,d6
  1337.  move.w #175,d0
  1338.  endc
  1339.  ifne LARGESCREEN
  1340.  move.l #$e5e5e5e5,d6
  1341.  move.w #511,d0
  1342.  endc
  1343.  
  1344. clrchunk:
  1345.  
  1346.  ifeq LARGESCREEN
  1347.  REPT 192/4
  1348.  move.l (a1)+,(a0)+
  1349.  endr
  1350.  add.w #(320-192),a0
  1351.  endc
  1352.  
  1353.  ifne LARGESCREEN
  1354.  REPT 160/4
  1355.  move.l d6,(a0)+
  1356.  endr
  1357.  endc
  1358.  
  1359.  dbra d0,clrchunk
  1360.  
  1361.  move.l #SHADOWBUFFER,a0
  1362.  move.l #-1,d1
  1363.  move.l #-1,d2
  1364.  move.w #15,d0
  1365. ;clrshad:
  1366. ; move.w #15,d5
  1367. ;innner
  1368. ; move.l d2,(a0)+
  1369. ; move.l d2,(a0)+
  1370. ; move.l d2,(a0)+
  1371. ; move.l d2,(a0)+
  1372. ; move.l d1,(a0)+
  1373. ; move.l d1,(a0)+
  1374. ; move.l d1,(a0)+
  1375. ; move.l d1,(a0)+
  1376. ; move.l d2,(a0)+
  1377. ; move.l d2,(a0)+
  1378. ; move.l d2,(a0)+
  1379. ; move.l d2,(a0)+
  1380. ; move.l d1,(a0)+
  1381. ; move.l d1,(a0)+
  1382. ; move.l d1,(a0)+
  1383. ; move.l d1,(a0)+
  1384. ; move.l d2,(a0)+
  1385. ; move.l d2,(a0)+
  1386. ; move.l d2,(a0)+
  1387. ; move.l d2,(a0)+
  1388. ; move.l d1,(a0)+
  1389. ; move.l d1,(a0)+
  1390. ; move.l d1,(a0)+
  1391. ; move.l d1,(a0)+
  1392. ; move.l d2,(a0)+
  1393. ; move.l d2,(a0)+
  1394. ; move.l d2,(a0)+
  1395. ; move.l d2,(a0)+
  1396. ; move.l d1,(a0)+
  1397. ; move.l d1,(a0)+
  1398. ; move.l d1,(a0)+
  1399. ; move.l d1,(a0)+
  1400. ; move.l d2,(a0)+
  1401. ; move.l d2,(a0)+
  1402. ; move.l d2,(a0)+
  1403. ; move.l d2,(a0)+
  1404. ; move.l d1,(a0)+
  1405. ; move.l d1,(a0)+
  1406. ; move.l d1,(a0)+
  1407. ; move.l d1,(a0)+
  1408. ; move.l d2,(a0)+
  1409. ; move.l d2,(a0)+
  1410. ; move.l d2,(a0)+
  1411. ; move.l d2,(a0)+
  1412. ; move.l d1,(a0)+
  1413. ; move.l d1,(a0)+
  1414. ; move.l d1,(a0)+
  1415. ; move.l d1,(a0)+
  1416. ; move.l d2,(a0)+
  1417. ; move.l d2,(a0)+
  1418. ; move.l d2,(a0)+
  1419. ; move.l d2,(a0)+
  1420. ; move.l d1,(a0)+
  1421. ; move.l d1,(a0)+
  1422. ; move.l d1,(a0)+
  1423. ; move.l d1,(a0)+
  1424. ; move.l d2,(a0)+
  1425. ; move.l d2,(a0)+
  1426. ; move.l d2,(a0)+
  1427. ; move.l d2,(a0)+
  1428. ; move.l d1,(a0)+
  1429. ; move.l d1,(a0)+
  1430. ; move.l d1,(a0)+
  1431. ; move.l d1,(a0)+
  1432. ; dbra d5,innner
  1433. ; exg d1,d2
  1434. ;
  1435. ; dbra d0,clrshad
  1436.  
  1437.  
  1438.  
  1439.     btst #7,$bfe001
  1440.     beq.s exit_closescr
  1441.  
  1442.  
  1443.     add.l #$8000,lmxoff
  1444.     cmp.l #40*65536,lmxoff
  1445.     blt.s .oksm
  1446.     sub.l #40*65536,lmxoff    
  1447. .oksm
  1448.  
  1449.     bra loop
  1450.     
  1451. lmxoff: dc.l 0
  1452.  
  1453. exit_closescr
  1454.     move.l    MyScreen(pc),a0
  1455.     CALLINT CloseScreen
  1456.  
  1457. exit_closeall
  1458.     move.l    _GfxBase(pc),a1
  1459.     CALLEXEC CloseLibrary
  1460.  
  1461. exit_closeint
  1462.     move.l    _IntuitionBase(pc),a1
  1463.     CALLEXEC CloseLibrary
  1464.  
  1465. exit_false
  1466.     move.l    #0,d0                return code
  1467.     rts
  1468.  
  1469. TESTTAB: ds.w 30
  1470.  
  1471. ************************************************
  1472. * SUBROUTINES HERE. ****************************
  1473. ************************************************
  1474.  
  1475.  
  1476. **********************************************************
  1477.  
  1478. * the definition of the screen - note that in assembler you
  1479. * MUST get the sizes of these fields correct, by consulting either
  1480. * the RKM or the header files
  1481.  
  1482.  
  1483. MyNewScreen    dc.w    0,0        left, top
  1484.         dc.w    320,256        width, height
  1485.         dc.w    8        depth
  1486.         dc.b    0,1        pens
  1487.         dc.w    0        viewmodes
  1488.         dc.w    CUSTOMSCREEN    type
  1489.         dc.l    MyFont        font
  1490.         dc.l    screen_title    title
  1491.         dc.l    0        gadgets
  1492.         dc.l    0        bitmap
  1493.  
  1494. * my font definition
  1495. MyFont    dc.l    font_name
  1496.     dc.w    TOPAZ_SIXTY
  1497.     dc.b    FS_NORMAL
  1498.     dc.b    FPF_ROMFONT
  1499.  
  1500. * the variables
  1501. _IntuitionBase    dc.l    0        Intuition lib pointer
  1502. _GfxBase    dc.l    0        graphics lib pointer
  1503. MyScreen        dc.l    0
  1504. MyWindow        dc.l    0
  1505. MyNewWindow    ds.b    nw_SIZE        a buffer
  1506.  
  1507.  
  1508. * some strings
  1509. int_name    INTNAME
  1510. graf_name    GRAFNAME
  1511. hello_message    dc.b    'Hello World'
  1512.  
  1513. * these are C strings, so have to be null terminated
  1514. screen_title    dc.b    'My Own Screen',0
  1515. font_name    dc.b    'topaz.font',0
  1516. window_title    dc.b    'A Simple Window',0
  1517.  
  1518.  even
  1519.  
  1520.  
  1521. doaSHADEpoly:
  1522.  
  1523.  move.w (a1)+,d7    ; sides to draw
  1524.  addq #2,a1        ; avoid holes
  1525.  
  1526.  move.l #SHADOWPTS,a3
  1527.  
  1528.  move.w (a1),d0
  1529.  move.w 4(a1),d1
  1530.  move.w 8(a1),d2
  1531.  muls #10,d0
  1532.  muls #10,d1
  1533.  muls #10,d2
  1534.  move.w 8(a3,d0.w),d3
  1535.  move.w 8(a3,d1.w),d4
  1536.  move.w 8(a3,d2.w),d5
  1537.  move.l (a3,d0.w),d0
  1538.  move.l (a3,d1.w),d1
  1539.  move.l (a3,d2.w),d2
  1540.  asr.l #8,d0
  1541.  asr.l #8,d1
  1542.  asr.l #8,d2
  1543.  asr.l #1,d0
  1544.  asr.l #1,d1
  1545.  asr.l #1,d2
  1546.  
  1547.  sub.w d1,d0
  1548.  sub.w d1,d2
  1549.  sub.w d4,d3
  1550.  sub.w d4,d5
  1551.  muls d3,d2
  1552.  muls d5,d0
  1553.  sub.l d0,d2
  1554.  bge SHADpolybehind
  1555.  
  1556.  
  1557.  
  1558.  move.w #20000,d4    ; top
  1559.  move.w #-20000,d5    ; bottom
  1560.  move.l #UVCOORDS,a4
  1561.  
  1562. putinlinesSHAD:
  1563.  move.w (a1),d0
  1564.  move.w 4(a1),d1
  1565.  
  1566.  moveq #0,d2
  1567.  move.b 2(a1),d2    ; one end U
  1568.  move.w d2,2(a4,d0.w*4)
  1569.  move.b 3(a1),d2    ; one end V
  1570.  move.w d2,(a4,d0.w*4)
  1571.  move.b 6(a1),d2    ; two end U
  1572.  move.w d2,2(a4,d1.w*4)
  1573.  move.b 7(a1),d2    ; two end V
  1574.  move.w d2,(a4,d1.w*4)
  1575.  
  1576.  move.w d0,d2
  1577.  muls #10,d2
  1578.  move.w 8(a3,d2.w),d2    ; Z
  1579.  
  1580.  cmp.w d2,d4
  1581.  ble.s .oktop
  1582.  move.w d2,d4
  1583. .oktop
  1584.  cmp.w d2,d5
  1585.  bge.s .okbot
  1586.  move.w d2,d5
  1587. .okbot
  1588.  
  1589.  movem.l d4/d5/d7/a1/a3/a4,-(a7)
  1590.  bsr SIMPLESHADLINE
  1591.  movem.l (a7)+,d4/d5/d7/a1/a3/a4
  1592.  addq #4,a1
  1593.  dbra d7,putinlinesSHAD
  1594.  addq #4,a1
  1595.   
  1596.  move.w (a1)+,TEXTUREADD
  1597.  
  1598.  asr.w #2,d4
  1599.  asr.w #2,d5
  1600.  add.w #128,d4
  1601.  add.w #128,d5
  1602.  move.w d4,TOPLINE
  1603.  move.w d5,BOTLINE
  1604.  
  1605. * Now draw the shadow polygon....
  1606.  
  1607.  move.l #SHADOWBUFFER,a2
  1608.  move.l #LEFTUVS,a0
  1609.  move.w TOPLINE,d0
  1610.  move.w BOTLINE,d1
  1611.  sub.w d0,d1
  1612.  asl.w #3,d0
  1613.  add.w d0,a0
  1614.  muls #(512/8),d0
  1615.  add.l d0,a2    ; pointer to screen line.
  1616.  
  1617.  subq #1,d1
  1618.  blt NOPOLYGONSHAD
  1619.  
  1620. DOAHORLINESHAD:
  1621.  swap d1
  1622.  
  1623.  move.w RIGHTUVS-LEFTUVS(a0),d0
  1624.  move.w (a0)+,d7
  1625.  sub.w d7,d0
  1626.  blt NOPOLYGONSHAD
  1627.  
  1628.  move.l a2,-(a7)
  1629.  
  1630. ; asr.w #2,d0
  1631. ; asr.w #2,d7
  1632.  lea (a2,d7.w*2),a2
  1633.  ext.l d0
  1634.  addq #1,d0
  1635.  
  1636.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1637.  move.w (a0)+,d4
  1638.  swap d7
  1639.  clr.w d7
  1640.  swap d4
  1641.  clr.w d4
  1642.  sub.l d4,d7
  1643.  divs.l d0,d7
  1644.  move.l d7,a5
  1645.  
  1646.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1647.  swap d7
  1648.  clr.w d7
  1649.  move.w (a0)+,d5
  1650.  swap d5
  1651.  clr.w d5
  1652.  sub.l d5,d7
  1653.  divs.l d0,d7
  1654.  move.l d7,a6
  1655.  
  1656.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1657.  swap d7
  1658.  clr.w d7
  1659.  move.w (a0)+,d6
  1660.  swap d6
  1661.  clr.w d6
  1662.  sub.l d6,d7
  1663.  divs.l d0,d7
  1664.  move.l d7,a3
  1665.  
  1666.  move.l a0,-(a7)
  1667.  move.l d1,-(a7)
  1668.  move.l #TEXTURES,a0
  1669.  move.w TEXTUREADD,d7
  1670.  bge.s .okaddtes3
  1671.  and.w #$7fff,d7
  1672.  add.l #65536*4,a0
  1673. .okaddtes3:
  1674.  ext.l d7
  1675. ; add.l d7,d7
  1676.  asl.l #8,d7
  1677.  add.l d7,a0
  1678.  move.w #0,d7
  1679.  
  1680.  subq #1,d0
  1681.  
  1682. ; d0=xdist
  1683. ; d4=U  a5=DU
  1684. ; d5=V  a6=DV
  1685. ; d6=Y  a3=DY
  1686.  moveq #0,d1
  1687.  
  1688.  swap d6
  1689.  
  1690. PLOTADOT:
  1691.  
  1692. .across
  1693.  
  1694. ; swap d4
  1695. ; swap d5
  1696. ; move.w d4,d2
  1697. ; lsl.w #8,d2
  1698. ; swap d4
  1699. ; move.b d5,d2
  1700. ; add.l a5,d4
  1701. ; swap d5
  1702. ; add.l a6,d5
  1703.  
  1704.  
  1705. ; swap d6
  1706. ; move.b (a2)+,d1
  1707. ; tst.b 1(a0,d2.w*8)
  1708. ; beq.s .noplottt
  1709.  move.b d6,(a2)
  1710.  addq #2,a2
  1711.  
  1712.  dbra d0,.across
  1713.  bra.s .plaster
  1714.  
  1715. .noplottt:
  1716.  addq #1,a2
  1717.  dbra d0,.across
  1718.  
  1719. .plaster:
  1720.  
  1721.  move.l (a7)+,d1
  1722.  move.l (a7)+,a0
  1723.  move.l (a7)+,a2
  1724.  
  1725. .noline:
  1726.  add.w #512,a2
  1727.  
  1728.  swap d1
  1729.  dbra d1,DOAHORLINESHAD
  1730.  
  1731. NOPOLYGONSHAD:
  1732.  
  1733. SHADpolybehind:
  1734.  rts
  1735.  
  1736.  
  1737. ************************************************
  1738.  
  1739. LU: dc.w 0
  1740. LV: dc.w 0
  1741. RU: dc.w 0
  1742. RV: dc.w 0
  1743.     
  1744. SIMPLESHADLINE:
  1745.  move.l #SHADOWPTS,a1
  1746.  
  1747.  move.l #UVCOORDS,a2
  1748.  move.w (a2,d0.w*4),LU
  1749.  move.w 2(a2,d0.w*4),LV
  1750.  move.w (a2,d1.w*4),RU
  1751.  move.w 2(a2,d1.w*4),RV
  1752.  
  1753.  muls #10,d0
  1754.  muls #10,d1
  1755.  move.w 8(a1,d0.w),d2        ;fz
  1756.  move.w 8(a1,d1.w),d7        ;sz
  1757.  ext.l d2
  1758.  ext.l d7
  1759.  
  1760.  move.l #LEFTUVS,a3
  1761.  asr.l #2,d2
  1762.  asr.l #2,d7
  1763.  cmp.l d2,d7 
  1764.  beq .noline
  1765.  
  1766.  bgt.s .lineonright
  1767. .lineonleft:
  1768.  move.l #RIGHTUVS,a3
  1769.  exg d0,d1
  1770.  exg d2,d7
  1771.  
  1772.  move.l LU,d5
  1773.  move.l RU,LU
  1774.  move.l d5,RU
  1775.  
  1776. .lineonright:
  1777.  
  1778.  sub.w d2,d7
  1779.  add.w #128,d2
  1780.  lea (a3,d2.w*8),a3
  1781.  
  1782.  move.w d7,YDIFF
  1783.  
  1784.  move.l (a1,d0.w),d3        ;fx
  1785.  move.l (a1,d1.w),d7        ;sx
  1786.  
  1787.  asl.l #5,d3
  1788.  asl.l #5,d7
  1789.  
  1790.  sub.l d3,d7
  1791.  divs.l YDIFF-2,d7
  1792.  move.l d7,a0    ; dx
  1793.  
  1794.  move.l #ROTATEDPTS,a1
  1795.  
  1796.  move.w LU,d4
  1797.  move.w LV,d5
  1798.  move.w RU,d6
  1799.  move.w RV,d7
  1800.  
  1801.  sub.w d4,d6
  1802.  sub.w d5,d7
  1803.  swap d4
  1804.  swap d5
  1805.  clr.w d4
  1806.  clr.w d5
  1807.  swap d6
  1808.  swap d7
  1809.  clr.w d6
  1810.  clr.w d7
  1811.  
  1812.  divs.l YDIFF-2,d6
  1813.  divs.l YDIFF-2,d7
  1814.  
  1815.  move.l d6,a4
  1816.  move.l d7,a5
  1817.  
  1818. ; asl.w #4,d0
  1819. ; asl.w #4,d1
  1820.  
  1821.  move.l 4(a1,d0.w),d6
  1822.  move.l 4(a1,d1.w),d7
  1823.  asl.l #5,d6
  1824.  asl.l #5,d7
  1825.  sub.l d6,d7
  1826.  divs.l YDIFF-2,d7
  1827.  exg d7,a6
  1828.  exg d7,d6
  1829.  
  1830.  move.l YDIFF-2,d1
  1831.  subq #1,d1
  1832.  
  1833. ; d3=x a0=dx
  1834. ; d4=u a4=du
  1835. ; d5=v a5=dv
  1836. ; d7=y a6=dy
  1837. ; d1=dz
  1838.  
  1839.  move.w HIGHPOLY,d7
  1840.  
  1841.  add.l #128*65536,d3
  1842. ; add.l #128*65536,d7
  1843.  
  1844. .PUTINLINE:
  1845.  swap d3
  1846.  move.w d3,(a3)+
  1847.  swap d3
  1848.  add.l a0,d3
  1849.  swap d4
  1850.  move.w d4,(a3)+
  1851.  swap d4
  1852.  swap d5
  1853.  add.l a4,d4
  1854.  move.w d5,(a3)+
  1855.  swap d5
  1856.  add.l a5,d5
  1857. ; swap d7
  1858.  move.w d7,(a3)+
  1859. ; swap d7
  1860. ; add.l a6,d7
  1861.  dbra d1,.PUTINLINE
  1862.  
  1863. .noline:
  1864.  rts
  1865.  
  1866. BCOS: dc.w 0
  1867. BSIN: dc.w 0
  1868. ACOS: dc.w 0
  1869. ASIN: dc.w 0
  1870.  
  1871. CCOS: dc.w 0
  1872. CSIN: dc.w 0
  1873. DCOS: dc.w 0
  1874. DSIN: dc.w 0
  1875. ECOS: dc.w 0
  1876. ESIN: dc.w 0
  1877.  
  1878. FSX: dc.w 0
  1879. FSY: dc.w 0
  1880. SSX: dc.w 0
  1881. SSY: dc.w 0
  1882.  
  1883. **************************************************
  1884.  
  1885. doapoly:
  1886.  
  1887.  move.w (a1)+,d7    ; sides to draw
  1888.  addq #2,a1        ; avoid holes
  1889.  move.w 12(a1,d7.w*4),pregour
  1890.  
  1891.  move.l #ONSCREENPTS,a3
  1892.  
  1893.  move.w (a1),d0
  1894.  move.w 4(a1),d1
  1895.  move.w 8(a1),d2
  1896.  move.w 2(a3,d0.w*4),d3
  1897.  move.w 2(a3,d1.w*4),d4
  1898.  move.w 2(a3,d2.w*4),d5
  1899.  move.w (a3,d0.w*4),d0
  1900.  move.w (a3,d1.w*4),d1
  1901.  move.w (a3,d2.w*4),d2
  1902.  
  1903.  sub.w d1,d0
  1904.  sub.w d1,d2
  1905.  sub.w d4,d3
  1906.  sub.w d4,d5
  1907.  muls d3,d2
  1908.  muls d5,d0
  1909.  sub.l d0,d2
  1910.  ble polybehind
  1911.  
  1912. ; Now we must rotate the polygons coordinates in
  1913. ; the specular map so that the texturemap is vertical
  1914. ; relative to the specular map and so that bump-
  1915. ; mapping can take place unerroneously!
  1916.  
  1917. ; movem.l d0-d7/a0-a6,-(a7)
  1918.  
  1919.  move.w #0,BCOS
  1920.  move.w #128*128,ACOS
  1921.  move.w #0,BSIN
  1922.  move.w #0,ASIN
  1923.  
  1924.  moveq #0,d3
  1925.  move.b 2(a1),d3
  1926.  moveq #0,d4
  1927.  move.b 3(a1),d4
  1928.  moveq #0,d5
  1929.  move.b 2+4(a1),d5
  1930.  moveq #0,d6
  1931.  move.b 3+4(a1),d6
  1932.  
  1933.  sub.w d3,d5
  1934.  sub.w d4,d6
  1935.  
  1936.  move.w d5,d1
  1937.  move.w d6,d2
  1938.  muls d1,d1
  1939.  muls d2,d2
  1940.  add.l d1,d2
  1941.  jsr CALCSQROOT
  1942.  tst.w d2
  1943.  beq .NOROT
  1944.  
  1945.  ext.l d5
  1946.  ext.l d6
  1947.  asl.l #7,d5
  1948.  asl.l #7,d6
  1949.  divs d2,d5
  1950.  divs d2,d6
  1951.  move.w d5,ECOS
  1952.  move.w d6,ESIN
  1953.  
  1954.  move.w ECOS,d0
  1955.  asl.w #7,d0
  1956.  move.w d0,ACOS
  1957.  move.w ESIN,d0
  1958.  asl.w #7,d0
  1959.  move.w d0,ASIN
  1960.  
  1961.  move.l #SPECBRIGHTS,a3
  1962.  
  1963.  move.w (a1),d0
  1964.  moveq #0,d5
  1965.  moveq #0,d6
  1966.  move.b (a3,d0.w*4),d5
  1967.  move.b 1(a3,d0.w*4),d6
  1968.  move.w 4(a1),d0
  1969.  moveq #0,d3
  1970.  moveq #0,d4
  1971.  move.b (a3,d0.w*4),d3
  1972.  move.b 1(a3,d0.w*4),d4
  1973.  sub.w d5,d3
  1974.  sub.w d6,d4
  1975.  
  1976.  move.w d3,d1
  1977.  move.w d4,d2
  1978.  muls d1,d1
  1979.  muls d2,d2
  1980.  add.l d1,d2
  1981.  jsr CALCSQROOT
  1982.  tst.w d2
  1983.  beq .NOROT1
  1984.  
  1985.  ext.l d3
  1986.  asl.l #7,d3
  1987.  ext.l d4
  1988.  asl.l #7,d4
  1989.  divs d2,d3
  1990.  divs d2,d4
  1991.  move.w d3,BCOS
  1992.  neg.w d4
  1993.  move.w d4,BSIN
  1994.  
  1995.  move.w ECOS,d4
  1996.  move.w ESIN,d5
  1997.  move.w d4,d2
  1998.  move.w d5,d3
  1999.  muls BCOS,d2
  2000.  muls BSIN,d3
  2001.  sub.l d3,d2
  2002.  muls BSIN,d4
  2003.  muls BCOS,d5
  2004.  add.l d5,d4
  2005.  move.w d2,ACOS
  2006.  move.w d4,ASIN
  2007.  
  2008. .NOROT1
  2009.  
  2010.  move.w #0,DCOS
  2011.  move.w #0,DSIN
  2012.  move.w ECOS,d0
  2013.  asl.w #7,d0
  2014.  move.w d0,CCOS
  2015.  move.w ESIN,d0
  2016.  asl.w #7,d0
  2017.  move.w d0,CSIN
  2018.  
  2019. ; bra .NOROT
  2020.  
  2021. ; First calculate angle B
  2022.  
  2023.  move.l #NORMBRIGHTS,a3
  2024.  
  2025.  movem.l d7/a1,-(a7)
  2026.  
  2027. .findnonzer:
  2028.  
  2029.  move.w (a1),d0
  2030.  moveq #0,d5
  2031.  moveq #0,d6
  2032.  move.b (a3,d0.w*2),d5
  2033.  move.b 1(a3,d0.w*2),d6
  2034.  move.w 4(a1),d0
  2035.  moveq #0,d3
  2036.  moveq #0,d4
  2037.  move.b (a3,d0.w*2),d3
  2038.  move.b 1(a3,d0.w*2),d4
  2039.  sub.w d5,d3
  2040.  sub.w d6,d4
  2041.  bne.s .okok
  2042.  tst.w d3
  2043.  bne.s .okok
  2044.  
  2045.  addq #4,a1
  2046.  
  2047.  dbra d7,.findnonzer
  2048.  
  2049.  movem.l (a7)+,d7/a1
  2050.  bra .NOROT
  2051.  
  2052. .okok:
  2053.  
  2054.  moveq #0,d3
  2055.  move.b 2(a1),d3
  2056.  moveq #0,d4
  2057.  move.b 3(a1),d4
  2058.  moveq #0,d5
  2059.  move.b 2+4(a1),d5
  2060.  moveq #0,d6
  2061.  move.b 3+4(a1),d6
  2062.  
  2063.  sub.w d3,d5
  2064.  sub.w d4,d6
  2065.  
  2066.  move.w d5,d1
  2067.  move.w d6,d2
  2068.  muls d1,d1
  2069.  muls d2,d2
  2070.  add.l d1,d2
  2071.  jsr CALCSQROOT
  2072.  tst.w d2
  2073.  beq .NOROT8
  2074.  
  2075.  ext.l d5
  2076.  ext.l d6
  2077.  asl.l #7,d5
  2078.  asl.l #7,d6
  2079.  divs d2,d5
  2080.  divs d2,d6
  2081.  move.w d5,ECOS
  2082.  neg.w d6
  2083.  move.w d6,ESIN
  2084.  move.w ECOS,d0
  2085.  asl.w #7,d0
  2086.  move.w d0,CCOS
  2087.  move.w ESIN,d0
  2088.  asl.w #7,d0
  2089.  neg.w d0
  2090.  move.w d0,CSIN
  2091.  
  2092. .NOROT8:
  2093.  
  2094.  movem.l (a7)+,d7/a1
  2095.  
  2096.  move.w d3,d1
  2097.  move.w d4,d2
  2098.  muls d1,d1
  2099.  muls d2,d2
  2100.  add.l d1,d2
  2101.  jsr CALCSQROOT
  2102.  tst.w d2
  2103.  beq .NOROT
  2104.  
  2105.  ext.l d3
  2106.  asl.l #7,d3
  2107.  ext.l d4
  2108.  asl.l #7,d4
  2109.  divs d2,d3
  2110.  divs d2,d4
  2111.  move.w d3,DCOS
  2112.  neg.w d4
  2113.  move.w d4,DSIN
  2114.  
  2115.  move.w ECOS,d4
  2116.  move.w ESIN,d5
  2117.  move.w d4,d2
  2118.  move.w d5,d3
  2119.  muls DCOS,d2
  2120.  muls DSIN,d3
  2121.  sub.l d3,d2
  2122.  muls DSIN,d4
  2123.  muls DCOS,d5
  2124.  add.l d5,d4
  2125.  move.w d2,CCOS
  2126.  move.w d4,CSIN
  2127.  
  2128.  
  2129. .NOROT:
  2130.  
  2131. ; movem.l (a7)+,d0-d7/a0-a6
  2132.  
  2133.  move.l #ONSCREENPTS,a3
  2134.  
  2135.  move.w #20000,d4    ; top
  2136.  move.w #-20000,d5    ; bottom
  2137.  move.l #UVCOORDS,a4
  2138.  
  2139.  move.l a1,a0
  2140.  
  2141. putinlines:
  2142.  move.w (a1),d0
  2143.  move.w 4(a1),d1
  2144.  
  2145.  moveq #0,d2
  2146.  move.b 2(a1),d2    ; one end U
  2147.  move.w d2,2(a4,d0.w*4)
  2148.  move.b 3(a1),d2    ; one end V
  2149.  move.w d2,(a4,d0.w*4)
  2150.  move.b 6(a1),d2    ; two end U
  2151.  move.w d2,2(a4,d1.w*4)
  2152.  move.b 7(a1),d2    ; two end V
  2153.  move.w d2,(a4,d1.w*4)
  2154.  
  2155.  move.w 2(a3,d0.w*4),d2    ; Z
  2156.  
  2157.  cmp.w d2,d4
  2158.  ble.s .oktop
  2159.  move.w d2,d4
  2160. .oktop
  2161.  cmp.w d2,d5
  2162.  bge.s .okbot
  2163.  move.w d2,d5
  2164. .okbot
  2165.  
  2166.  movem.l a0/d4/d5/d7/a1/a3/a4,-(a7)
  2167.  jsr SIMPLECALCLINE
  2168.  movem.l (a7)+,a0/d4/d5/d7/a1/a3/a4
  2169.  addq #4,a1
  2170.  dbra d7,putinlines
  2171.  addq #4,a1 
  2172.  
  2173.  move.w (a1)+,TEXTUREADD
  2174.  
  2175.  asr.w #2,d4
  2176.  asr.w #2,d5
  2177. ; add.w #128,d4
  2178. ; add.w #128,d5
  2179.  move.w d4,TOPLINE
  2180.  move.w d5,BOTLINE
  2181.   
  2182.  move.l #SHADOWPTS,a1
  2183.  move.w (a0),d0
  2184.  move.w 4(a0),d1
  2185.  move.w 8(a0),d2
  2186.  
  2187. CHECKVALS:
  2188.  
  2189.  muls #10,d0
  2190.  muls #10,d1
  2191.  muls #10,d2
  2192.  
  2193.  lea (a1,d0.w),a0
  2194.  lea (a1,d2.w),a2
  2195.  lea (a1,d1.w),a1
  2196.  
  2197.  move.l (a0),d3
  2198.  sub.l (a1),d3
  2199.  asr.l #8,d3
  2200.  asr.l #1,d3
  2201.  move.l 4(a0),d4
  2202.  sub.l 4(a1),d4
  2203.  asr.l #8,d4
  2204.  asr.l #1,d4
  2205.  move.w 8(a0),d5
  2206.  sub.w 8(a1),d5
  2207.  
  2208.  move.w d3,d6
  2209.  muls d6,d6
  2210.  move.w d4,d7
  2211.  muls d7,d7
  2212.  add.l d7,d6
  2213.  move.w d5,d7
  2214.  muls d7,d7
  2215.  add.l d7,d6
  2216.  move.l d6,d2
  2217.  jsr CALCSQROOT
  2218.  move.w d2,LEN1
  2219.  
  2220.  move.l (a2),d0
  2221.  sub.l (a1),d0
  2222.  asr.l #8,d0
  2223.  asr.l #1,d0
  2224.  move.l 4(a2),d1
  2225.  sub.l 4(a1),d1
  2226.  asr.l #8,d1
  2227.  asr.l #1,d1
  2228.  move.w 8(a2),d2
  2229.  sub.w 8(a1),d2
  2230.  
  2231.  muls d2,d3
  2232.  muls d0,d5
  2233.  sub.l d3,d5    ; length
  2234.  muls.l #$4c,d5
  2235.  
  2236.  muls d0,d0
  2237.  muls d1,d1
  2238.  muls d2,d2
  2239.  add.l d0,d1
  2240.  add.l d1,d2
  2241.  jsr CALCSQROOT
  2242.  
  2243.  muls LEN1,d2
  2244.  bgt.s .ok
  2245.  moveq #1,d2
  2246. .ok
  2247.  
  2248.  divs.l d2,d5
  2249.  
  2250.  add.l #16,d5
  2251.  
  2252.  tst.l d5
  2253.  ble.s .okbr
  2254.  moveq #0,d5
  2255. .okbr:
  2256.  add.w #$5c,d5
  2257.  bge.s .okbr2
  2258.  moveq #0,d5
  2259. .okbr2:
  2260.  
  2261.  move.w d5,d0
  2262.  
  2263.  asl.w #8,d5
  2264.  move.w d5,BRIGHTNESS+2
  2265.  
  2266.  sub.w #$5c,d0
  2267.  asr.w #1,d0
  2268.  add.w #$5c,d0
  2269.  asl.w #8,d0
  2270.  move.w d0,BRIGHTNESS
  2271.  
  2272.  
  2273. ***********************************************
  2274. * Draw the polygon (shadowed).
  2275.  
  2276.  move.l FASTBUFFER,a2
  2277.  move.l #LEFTUVS,a0
  2278.  move.w TOPLINE,d0
  2279.  move.w BOTLINE,d1
  2280.  sub.w d0,d1
  2281.  move.w d0,d2
  2282.  muls #20,d2
  2283.  add.l d2,a0
  2284.  muls #320,d0
  2285.  add.l d0,a2    ; pointer to screen line.
  2286.  
  2287.  subq #1,d1
  2288.  blt NOPOLYGON
  2289.  
  2290.  tst.b Gouraud
  2291.  bne GOURPOLY
  2292.  
  2293. DOAHORLINE:
  2294.  swap d1
  2295.  
  2296.  move.w RIGHTUVS-LEFTUVS(a0),d0
  2297.  move.w (a0)+,d7
  2298.  asr.w #2,d0
  2299.  asr.w #2,d7
  2300.  sub.w d7,d0
  2301.  bge.s .okflibble
  2302.  
  2303.  add.w #14,a0
  2304.  add.w #320,a2
  2305.  swap d1
  2306.  dbra d1,DOAHORLINE
  2307.  bra NOPOLYGON
  2308.  
  2309. .okflibble:
  2310.  
  2311.  move.l a2,-(a7)
  2312.  
  2313.  add.w d7,a2
  2314.  ext.l d0
  2315.  addq #1,d0
  2316.  
  2317.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2318.  move.l (a0)+,d2 
  2319.  sub.l d2,d7
  2320.  divs.l d0,d7
  2321.  move.l d7,a1
  2322.  
  2323.  
  2324.  
  2325.  
  2326.  
  2327.  
  2328.  
  2329.  
  2330.  
  2331.  
  2332.  
  2333.  
  2334.  
  2335.  
  2336.  
  2337.  
  2338.  
  2339.  
  2340.  move.l RIGHTUVS-LEFTUVS(a0),d7 
  2341.  move.l (a0)+,d3 
  2342.  
  2343.  
  2344.  
  2345.  
  2346.  
  2347.  
  2348.  
  2349.  
  2350.  
  2351.  
  2352.  
  2353.  
  2354.  
  2355.  
  2356.  
  2357.  
  2358.  
  2359.  
  2360.  
  2361.  
  2362.  sub.l d3,d7
  2363.  divs.l d0,d7
  2364.  move.l d7,a4
  2365.  
  2366.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2367.  move.w (a0)+,d4
  2368.  swap d7
  2369.  clr.w d7
  2370.  swap d4
  2371.  clr.w d4
  2372.  sub.l d4,d7
  2373.  divs.l d0,d7
  2374.  move.l d7,a5
  2375.  
  2376.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2377.  swap d7
  2378.  clr.w d7
  2379.  move.w (a0)+,d5
  2380.  swap d5
  2381.  clr.w d5
  2382.  sub.l d5,d7
  2383.  divs.l d0,d7
  2384.  move.l d7,a6
  2385.  
  2386.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2387.  swap d7
  2388.  clr.w d7
  2389.  move.w (a0)+,d6
  2390.  swap d6
  2391.  clr.w d6
  2392.  sub.l d6,d7
  2393.  divs.l d0,d7
  2394.  move.l d7,a3
  2395.  
  2396.  move.l a0,-(a7)
  2397.  move.l d1,-(a7)
  2398.  move.l #TEXTURES,a0
  2399.  move.w TEXTUREADD,d7
  2400.  bge.s .okaddtes3
  2401.  and.w #$7fff,d7
  2402.  add.l #65536*4,a0
  2403. .okaddtes3:
  2404.  ext.l d7
  2405. ; add.l d7,d7
  2406.  asl.l #8,d7
  2407.  add.l d7,a0
  2408.  move.w #0,d7
  2409.  
  2410.  move.l BRIGHTNESS,a6
  2411.  
  2412.  move.l a7,SAVESTACK
  2413.  move.l #SHADOWBUFFER,a7
  2414.  
  2415.  subq #1,d0
  2416.  
  2417. ; d0=xdist
  2418. ; d2=U    a1=DU
  2419. ; d3=V  a4=DV
  2420. ; d4=X  a5=DX
  2421. ; d5=Y  a6=DY
  2422. ; d6=Z  a3=DZ
  2423.  move.w HIGHPOLY,d5
  2424.  
  2425.  moveq #0,d1
  2426.  swap d6
  2427.  move.w d6,d1
  2428.  lsl.w #8,d1
  2429.  swap d4
  2430.  move.b d4,d1
  2431.  swap d4
  2432.  swap d6
  2433.  
  2434.  moveq #0,d7
  2435.  move.b (a7,d1.l),d7
  2436.  cmp.w d7,d5
  2437.  ble INTHELIGHT
  2438.  bra.s INTHEDARK
  2439.  
  2440. PENUMBRA:
  2441.  moveq #0,d1
  2442.  swap d6
  2443.  move.w d6,d1
  2444.  lsl.w #8,d1
  2445.  swap d4
  2446.  move.b d4,d1
  2447.  swap d4
  2448.  swap d6
  2449.  add.l a5,d4
  2450.  add.l a3,d6
  2451.  
  2452.      moveq #0,d7
  2453.  move.b (a7,d1.l),d7
  2454.  cmp.w d7,d5
  2455.  ble INTOLIGHT
  2456.  bra.s INTODARK
  2457.  
  2458.  
  2459. INTHEDARK:
  2460.  moveq #0,d1
  2461.  swap d6
  2462.  move.w d6,d1
  2463.  lsl.w #8,d1
  2464.  swap d4
  2465.  move.b d4,d1
  2466.  swap d4
  2467.  swap d6
  2468.  add.l a5,d4
  2469.  add.l a3,d6
  2470.  
  2471.  moveq #0,d7
  2472.  move.b (a7,d1.l),d7
  2473.  cmp.w d7,d5
  2474.  ble.s INTOPENUM
  2475. INTODARK:
  2476.  move.w #$5c00,d7
  2477.  swap d2
  2478.  move.w d2,d1
  2479.  asl.w #8,d1
  2480.  swap d3
  2481.  move.b d3,d1
  2482.  swap d2
  2483.  swap d3
  2484.  add.l a1,d2
  2485.  add.l a4,d3
  2486.  
  2487. ; move.b (a0,d1.w*4),d7
  2488. ; beq.s .noplottt
  2489.  
  2490.  move.b TEXTUREPAL-256(pc,d7.w),(a2)+
  2491.  dbra d0,INTHEDARK
  2492.  bra.s PASTAC 
  2493.  
  2494. .noplottt
  2495.  addq #1,a2
  2496.  dbra d0,INTHEDARK
  2497.  bra.s PASTAC
  2498.  
  2499. INTOPENUM:
  2500.  move.l a6,d7
  2501.  swap d7
  2502.  swap d2
  2503.  move.w d2,d1
  2504.  asl.w #8,d1
  2505.  swap d3
  2506.  move.b d3,d1
  2507.  swap d2
  2508.  swap d3
  2509.  add.l a1,d2
  2510.  add.l a4,d3
  2511.  
  2512. ; move.b (a0,d1.w*4),d7
  2513. ; beq.s .noplottt
  2514.  
  2515.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2516.  dbra d0,PENUMBRA
  2517.  bra.s PASTAC 
  2518.  
  2519. .noplottt
  2520.  addq #1,a2
  2521.  dbra d0,PENUMBRA
  2522.  bra.s PASTAC
  2523.  
  2524. INTHELIGHT:
  2525.  
  2526.  moveq #0,d1
  2527.  swap d6
  2528.  move.w d6,d1
  2529.  lsl.w #8,d1
  2530.  swap d4
  2531.  move.b d4,d1
  2532.  swap d4
  2533.  swap d6
  2534.  add.l a5,d4
  2535.  add.l a3,d6
  2536.  
  2537.  moveq #0,d7
  2538.  move.b (a7,d1.l),d7
  2539.  cmp.w d7,d5
  2540.  bgt.s INTOPENUM
  2541. INTOLIGHT:
  2542.  move.w a6,d7
  2543.  swap d2
  2544.  move.w d2,d1
  2545.  asl.w #8,d1
  2546.  swap d3
  2547.  move.b d3,d1
  2548.  swap d2
  2549.  swap d3
  2550.  add.l a1,d2
  2551.  add.l a4,d3
  2552.  
  2553. ; move.b (a0,d1.w*4),d7
  2554. ; beq.s .noplottt
  2555.  
  2556.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2557.  dbra d0,INTHELIGHT
  2558.  bra.s PASTAC 
  2559.  
  2560. .noplottt:
  2561.  addq #1,a2
  2562.  dbra d0,INTHELIGHT
  2563.  
  2564. PASTAC
  2565.  
  2566.  move.l SAVESTACK,a7
  2567.  
  2568.  move.l (a7)+,d1
  2569.  move.l (a7)+,a0
  2570.  move.l (a7)+,a2
  2571.  
  2572. .noline:
  2573.  add.w #320,a2
  2574.  
  2575.  swap d1
  2576.  dbra d1,DOAHORLINE
  2577.  
  2578. NOPOLYGON:
  2579. polybehind:
  2580.  rts
  2581.  
  2582. TEXTUREPAL:
  2583.  
  2584. SAVESTACK: dc.l 0
  2585. HIGHPOLY: dc.w 0
  2586. LEN1: dc.w 0
  2587. BRIGHTNESS: dc.l 0
  2588. TRANSTEXT: dc.w 0
  2589. AANG: dc.w 0
  2590. BANG: dc.w 0
  2591. CANG: dc.w 0
  2592. DANG: dc.w 0
  2593.  
  2594.  include "ab3:print.s"
  2595.  
  2596.  temp: dc.w 0
  2597.  
  2598. GOURPOLY: 
  2599.  
  2600. DOAHORLINEGOUR:
  2601.  swap d1
  2602.  
  2603.  ifeq SHADING
  2604.  move.w #128,16(a0)
  2605.  move.w #128,16+RIGHTUVS-LEFTUVS(a0)
  2606.  move.w #128,4+RIGHTUVS-LEFTUVS(a0)
  2607.  move.w #128,4(a0)
  2608.  endc
  2609.  
  2610.  move.w RIGHTUVS-LEFTUVS(a0),d0
  2611.  move.w (a0)+,d7
  2612.  asr.w #2,d0
  2613.  asr.w #2,d7
  2614.  sub.w d7,d0
  2615.  bge.s .okflibble
  2616.  
  2617.  add.w #18,a0
  2618.  add.w #320,a2
  2619.  swap d1
  2620.  dbra d1,DOAHORLINEGOUR
  2621.  bra NOPOLYGON
  2622.  
  2623. .okflibble:
  2624.  
  2625.  move.l a2,-(a7)
  2626.  
  2627.  add.w d7,a2
  2628.  ext.l d0
  2629.  addq #1,d0
  2630.  
  2631.  move.b RIGHTUVS-LEFTUVS(a0),d3
  2632.  move.b (a0),d2
  2633.  
  2634.  ext.w d3
  2635.  ext.w d2
  2636.  
  2637.  tst.w d2
  2638.  blt .bothtowards
  2639.  
  2640. ; bgt .firstaway
  2641.  tst.w d3
  2642.  blt .bothtowards
  2643.  bra .bothaway
  2644.  
  2645. .firsttowards:
  2646.  tst.w d3
  2647.  ble .bothtowards
  2648.  
  2649. ; First is towards and second away...
  2650.  
  2651.  move.w d0,d7    ; total length
  2652.  move.w d0,d6
  2653.  neg.w d2
  2654.  add.w d2,d3
  2655.  muls d2,d6
  2656.  divs d3,d6    ; length of first bit
  2657.  sub.w d6,d7    ; length of second bit
  2658.  move.w d6,FIRSTLEN
  2659.  move.w d7,LASTLEN
  2660.  
  2661.  tst.w FIRSTLEN
  2662.  beq .bothaway
  2663.  tst.w LASTLEN
  2664.  beq .bothtowards
  2665.  
  2666.  moveq #0,d2
  2667.  moveq #0,d3
  2668.  moveq #0,d4
  2669.  moveq #0,d5
  2670.  move.b 6(a0),d2
  2671.  move.b 7(a0),d3
  2672.  
  2673.  move.w d2,FIRSTU
  2674.  move.w d3,FIRSTV
  2675.  
  2676.  move.w d2,d4
  2677.  move.w d3,d5
  2678.  sub.w #128,d2
  2679.  sub.w #128,d3
  2680.  muls d2,d2
  2681.  muls d3,d3
  2682.  add.l d3,d2
  2683.  jsr CALCSQROOT
  2684.  
  2685.  tst.w d2
  2686.  beq.s .nochng
  2687.  
  2688.  sub.w #128,d4
  2689.  sub.w #128,d5
  2690.  muls #127,d4
  2691.  muls #127,d5
  2692.  divs d2,d4
  2693.  divs d2,d5
  2694.  add.w #128,d4
  2695.  add.w #128,d5
  2696.  
  2697. .nochng:
  2698.  
  2699.  move.w d4,MIDU
  2700.  move.w d5,MIDV
  2701.  
  2702.  move.b 6+RIGHTUVS-LEFTUVS(a0),d4
  2703.  move.b 7+RIGHTUVS-LEFTUVS(a0),d5
  2704.  move.w d4,SECU
  2705.  move.w d5,SECV
  2706.  
  2707.  move.w d4,d2
  2708.  move.w d5,d3
  2709.  
  2710.  sub.w #128,d2
  2711.  sub.w #128,d3
  2712.  muls d2,d2
  2713.  muls d3,d3
  2714.  add.l d3,d2
  2715.  jsr CALCSQROOT
  2716.  
  2717.  tst.w d2
  2718.  beq.s .nochng2
  2719.  
  2720.  sub.w #128,d4
  2721.  sub.w #128,d5
  2722.  muls #127,d4
  2723.  muls #127,d5
  2724.  divs d2,d4
  2725.  divs d2,d5
  2726.  add.w #128,d4
  2727.  add.w #128,d5
  2728.  
  2729. .nochng2:
  2730.  
  2731.  add.w MIDU,d4
  2732.  add.w MIDV,d5
  2733.  asr.w #1,d4
  2734.  asr.w #1,d5
  2735.  move.w d4,MIDU
  2736.  move.w d5,MIDV 
  2737.  
  2738.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2739.  move.l (a0)+,d2 
  2740.  
  2741.  and.l #$ffffff,d2
  2742.  and.l #$ffffff,d7
  2743.  
  2744.  moveq #0,d3
  2745.  moveq #0,d5
  2746.  move.w d2,d3
  2747. ; bge.s .okp1
  2748. ; moveq #0,d3
  2749. ;.okp1
  2750.  move.w d7,d5
  2751. ; bge.s .okp2
  2752. ; moveq #0,d5
  2753. ;.okp2
  2754.  
  2755.  swap d3
  2756.  swap d5
  2757.  sub.l d3,d5
  2758.  divs.l d0,d5
  2759.  asr.l #8,d5
  2760.  move.w d5,RIGHTBRIGHT
  2761.  asr.l #8,d3
  2762.  move.w d3,LEFTBRIGHT
  2763.  
  2764.  clr.w d2
  2765.  clr.w d7
  2766.  sub.l d2,d7
  2767.  asl.l #8,d2
  2768.  divs.l d0,d7
  2769.  asl.l #8,d7
  2770.  
  2771.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2772.  move.l (a0)+,d3
  2773.  
  2774.  moveq #0,d4
  2775.  moveq #0,d5
  2776.  
  2777. ; move.w d6,d5
  2778. ; move.w d3,d4
  2779. ; move.b #0,d4
  2780. ; move.b #0,d5
  2781.  
  2782.  move.w FIRSTU,d4
  2783.  move.w MIDU,d5
  2784.  lsl.l #8,d4
  2785.  lsl.l #8,d5
  2786.  
  2787.  sub.l d4,d5
  2788.  divs.l FIRSTLEN-2,d5
  2789.  
  2790.  move.w d4,d2
  2791.  move.w d5,d7
  2792.  move.l d7,a1
  2793.  moveq #0,d4
  2794.  moveq #0,d5
  2795.  
  2796. ; move.b d6,d5
  2797. ; move.b d3,d4
  2798.  
  2799. ; swap d5
  2800. ; swap d4
  2801.  
  2802.  move.w FIRSTV,d4
  2803.  move.w MIDV,d5
  2804.  swap d4
  2805.  swap d5
  2806.  
  2807.  sub.l d4,d5
  2808.  divs.l FIRSTLEN-2,d5
  2809.  
  2810.  move.l d5,a3
  2811.  move.l d4,d5
  2812.   
  2813.  clr.w d3
  2814.  clr.w d6
  2815.  sub.l d3,d6
  2816.  divs.l d0,d6
  2817.  move.l d6,a4
  2818.  
  2819.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2820.  move.w (a0)+,d4
  2821.  swap d7
  2822.  clr.w d7
  2823.  swap d4
  2824.  clr.w d4
  2825.  sub.l d4,d7
  2826.  divs.l d0,d7
  2827.  move.l d7,a5
  2828.  
  2829. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2830. ; swap d7
  2831. ; clr.w d7
  2832.  move.w (a0)+,d7
  2833. ; swap d5
  2834. ; clr.w d5
  2835. ; sub.l d5,d7
  2836. ; divs.l d0,d7
  2837. ; move.l d7,a6
  2838.  
  2839.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2840.  swap d7
  2841.  clr.w d7
  2842.  move.w (a0)+,d6
  2843.  swap d6
  2844.  clr.w d6
  2845.  sub.l d6,d7
  2846.  divs.l d0,d7
  2847.  
  2848.  lsl.l #8,d6
  2849.  lsl.l #8,d7
  2850.  
  2851.  move.w RIGHTBRIGHT,d7
  2852.  move.l d7,a6
  2853.  
  2854.  
  2855.  move.l a0,-(a7)
  2856.  move.l d1,-(a7)
  2857.  move.l #TEXTURES,a0
  2858.  move.w TEXTUREADD,d7
  2859.  bge.s .okaddtes3
  2860.  and.w #$7fff,d7
  2861.  add.l #65536*4,a0
  2862. .okaddtes3:
  2863.  ext.l d7
  2864. ; add.l d7,d7
  2865.  asl.l #8,d7
  2866.  add.l d7,a0
  2867.  move.w #0,d7
  2868.  
  2869.  move.w LEFTBRIGHT,d6
  2870.  
  2871.  subq #1,d0
  2872.  swap d0
  2873.  move.w HIGHPOLY,d0
  2874.  swap d0
  2875.  
  2876.  
  2877. ; d0=xdist
  2878. ; d2=U    a1=DU
  2879. ; d3=V  a4=DV
  2880. ; d4=X  a5=DX
  2881. ; d5=Y  a6=DY
  2882. ; d6=Z  a3=DZ
  2883.  
  2884. ; d0= polynum : polynum : counter : counter
  2885. ; d1= scratch : scratch : scratch : scratch
  2886. ; d2= u : uacc : sv : svacc
  2887. ; d3= v : v : vacc : vacc
  2888. ; d4= x : x : xacc : xacc
  2889. ; d5= su : su : suacc : suacc
  2890. ; d6= z : zacc : bright : brightacc
  2891. ; d7= scratch : scratch : scratch : scratch
  2892.  
  2893. ; a0= textures
  2894. ; a1= uspeed : uspeed : suspeed : suspeed
  2895. ; a2= screen pointer
  2896. ; a3= svspeed : svspeed : svspeed : svspeed
  2897. ; a4= vspeed : vspeed : vspeed : vspeed
  2898. ; a5= xspeed : xspeed : xspeed : xspeed
  2899. ; a6= zspeed : zspeed :brightspeed : brightspeed
  2900. ; a7= shadowmap pointer
  2901.  
  2902.  
  2903.  move.w FIRSTLEN,d0
  2904.  sub.w #1,d0
  2905.  bsr STARTLINE
  2906.  
  2907.  move.l #0,d5
  2908.  move.w #0,d2
  2909.  move.l #0,a3
  2910.  
  2911.  move.w LASTLEN,d0
  2912.  sub.w #1,d0
  2913.  
  2914.  bsr STARTLINE
  2915.  
  2916.  
  2917.  move.l (a7)+,d1
  2918.  move.l (a7)+,a0
  2919.  move.l (a7)+,a2
  2920.  
  2921.  bra .noline
  2922.  
  2923. .firstaway:
  2924.  tst.w d3
  2925.  bge .bothaway
  2926.  
  2927.  
  2928. ; first is away and second is towards...
  2929.  
  2930. ; this really isn't going to work...
  2931.  
  2932.  move.w d0,d7    ; total length
  2933.  move.w d0,d6
  2934.  neg.w d3
  2935.  add.w d2,d3
  2936.  muls d2,d6
  2937.  divs d3,d6    ; length of first bit
  2938.  sub.w d6,d7    ; length of second bit
  2939.  move.w d6,FIRSTLEN
  2940.  move.w d7,LASTLEN
  2941.  
  2942.  tst.w FIRSTLEN
  2943.  beq .bothaway
  2944.  tst.w LASTLEN
  2945.  beq .bothtowards
  2946.  
  2947.  moveq #0,d2
  2948.  moveq #0,d3
  2949.  moveq #0,d4
  2950.  moveq #0,d5
  2951.  move.b 6(a0),d2
  2952.  move.b 7(a0),d3
  2953.  
  2954.  move.w d2,FIRSTU
  2955.  move.w d3,FIRSTV
  2956.  
  2957.  move.w d2,d4
  2958.  move.w d3,d5
  2959.  sub.w #128,d2
  2960.  sub.w #128,d3
  2961.  muls d2,d2
  2962.  muls d3,d3
  2963.  add.l d3,d2
  2964.  jsr CALCSQROOT
  2965.  
  2966.  tst.w d2
  2967.  beq.s .nochng22
  2968.  
  2969.  sub.w #128,d4
  2970.  sub.w #128,d5
  2971.  muls #127,d4
  2972.  muls #127,d5
  2973.  divs d2,d4
  2974.  divs d2,d5
  2975.  add.w #128,d4
  2976.  add.w #128,d5
  2977.  
  2978. .nochng22:
  2979.  
  2980.  move.w d4,MIDU
  2981.  move.w d5,MIDV
  2982.  
  2983.  moveq #0,d4
  2984.  moveq #0,d5
  2985.  move.b 6+RIGHTUVS-LEFTUVS(a0),d4
  2986.  move.b 7+RIGHTUVS-LEFTUVS(a0),d5
  2987.  move.w d4,SECU
  2988.  move.w d5,SECV
  2989.  
  2990.  move.w d4,d2
  2991.  move.w d5,d3
  2992.  
  2993.  sub.w #128,d2
  2994.  sub.w #128,d3
  2995.  muls d2,d2
  2996.  muls d3,d3
  2997.  add.l d3,d2
  2998.  jsr CALCSQROOT
  2999.  
  3000.  tst.w d2
  3001.  beq.s .nochng222
  3002.  
  3003.  sub.w #128,d4
  3004.  sub.w #128,d5
  3005.  muls #127,d4
  3006.  muls #127,d5
  3007.  divs d2,d4
  3008.  divs d2,d5
  3009.  add.w #128,d4
  3010.  add.w #128,d5
  3011.  
  3012. .nochng222:
  3013.  
  3014.  add.w MIDU,d4
  3015.  add.w MIDV,d5
  3016.  asr.w #1,d4
  3017.  asr.w #1,d5
  3018.  move.w d4,MIDU
  3019.  move.w d5,MIDV
  3020.  
  3021.  
  3022.  move.l RIGHTUVS-LEFTUVS(a0),d7
  3023.  move.l (a0)+,d2 
  3024.  
  3025.  and.l #$ffffff,d2
  3026.  and.l #$ffffff,d7
  3027.  
  3028.  moveq #0,d3
  3029.  moveq #0,d5
  3030.  move.w d2,d3
  3031.  move.w d7,d5
  3032.  swap d3
  3033.  swap d5
  3034.  sub.l d3,d5
  3035.  divs.l d0,d5
  3036.  asr.l #8,d5
  3037.  move.w d5,RIGHTBRIGHT
  3038.  asr.l #8,d3
  3039.  move.w d3,LEFTBRIGHT
  3040.  
  3041.  clr.w d2
  3042.  clr.w d7
  3043.  sub.l d2,d7
  3044.  asl.l #8,d2
  3045.  divs.l d0,d7
  3046.  asl.l #8,d7
  3047.  
  3048.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  3049.  move.l (a0)+,d3
  3050.  
  3051.  moveq #0,d4
  3052.  moveq #0,d5
  3053.  
  3054.  move.w MIDU,d4
  3055.  move.w SECU,d5
  3056.  lsl.w #8,d4
  3057.  lsl.w #8,d5
  3058.  
  3059. ; move.w d6,d5
  3060. ; move.w d3,d4
  3061. ; move.b #0,d4
  3062. ; move.b #0,d5
  3063.  
  3064.  sub.l d4,d5
  3065.  divs.l LASTLEN-2,d5
  3066.  
  3067.  move.w d4,d2
  3068.  move.w d5,d7
  3069.  move.l d7,a1
  3070.  moveq #0,d4
  3071.  moveq #0,d5
  3072.  
  3073.  move.w MIDV,d4
  3074.  move.w SECV,d5
  3075.  
  3076.  swap d5
  3077.  swap d4
  3078.  
  3079.  sub.l d4,d5
  3080.  divs.l LASTLEN-2,d5
  3081.  
  3082.  move.l d5,a3
  3083.  move.l d4,d5
  3084.  
  3085.  clr.w d3
  3086.  clr.w d6
  3087.  sub.l d3,d6
  3088.  divs.l d0,d6
  3089.  move.l d6,a4
  3090.  
  3091.  move.w RIGHTUVS-LEFTUVS(a0),d7
  3092.  move.w (a0)+,d4
  3093.  swap d7
  3094.  clr.w d7
  3095.  swap d4
  3096.  clr.w d4
  3097.  sub.l d4,d7
  3098.  divs.l d0,d7
  3099.  move.l d7,a5
  3100.  
  3101. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  3102. ; swap d7
  3103. ; clr.w d7
  3104.  move.w (a0)+,d7
  3105. ; swap d5
  3106. ; clr.w d5
  3107. ; sub.l d5,d7
  3108. ; divs.l d0,d7
  3109. ; move.l d7,a6
  3110.  
  3111.  move.w RIGHTUVS-LEFTUVS(a0),d7
  3112.  swap d7
  3113.  clr.w d7
  3114.  move.w (a0)+,d6
  3115.  swap d6
  3116.  clr.w d6
  3117.  sub.l d6,d7
  3118.  divs.l d0,d7
  3119.  
  3120.  lsl.l #8,d6
  3121.  lsl.l #8,d7
  3122.  
  3123.  move.w RIGHTBRIGHT,d7
  3124.  move.l d7,a6
  3125.  
  3126.  move.l a0,-(a7)
  3127.  move.l d1,-(a7)
  3128.  move.l #TEXTURES,a0
  3129.  move.w TEXTUREADD,d7
  3130.  bge.s .okaddtes4
  3131.  and.w #$7fff,d7
  3132.  add.l #65536*4,a0
  3133. .okaddtes4:
  3134.  ext.l d7
  3135. ; add.l d7,d7
  3136.  asl.l #8,d7
  3137.  add.l d7,a0
  3138.  move.w #0,d7
  3139.  
  3140.  move.w LEFTBRIGHT,d6
  3141.  
  3142.  
  3143.  subq #1,d0
  3144.  swap d0
  3145.  move.w HIGHPOLY,d0
  3146.  swap d0
  3147.  
  3148.  
  3149. ; d0=xdist
  3150. ; d2=U    a1=DU
  3151. ; d3=V  a4=DV
  3152. ; d4=X  a5=DX
  3153. ; d5=Y  a6=DY
  3154. ; d6=Z  a3=DZ
  3155.  
  3156. ; d0= polynum : polynum : counter : counter
  3157. ; d1= scratch : scratch : scratch : scratch
  3158. ; d2= u : uacc : sv : svacc
  3159. ; d3= v : v : vacc : vacc
  3160. ; d4= x : x : xacc : xacc
  3161. ; d5= su : su : suacc : suacc
  3162. ; d6= z : zacc : bright : brightacc
  3163. ; d7= scratch : scratch : scratch : scratch
  3164.  
  3165. ; a0= textures
  3166. ; a1= uspeed : uspeed : suspeed : suspeed
  3167. ; a2= screen pointer
  3168. ; a3= svspeed : svspeed : svspeed : svspeed
  3169. ; a4= vspeed : vspeed : vspeed : vspeed
  3170. ; a5= xspeed : xspeed : xspeed : xspeed
  3171. ; a6= zspeed : zspeed :brightspeed : brightspeed
  3172. ; a7= shadowmap pointer
  3173.  
  3174.  move.w d2,-(a7)
  3175.  move.l d5,-(a7)
  3176.  move.l a3,-(a7)
  3177.  
  3178.  move.w #0,d2
  3179.  move.l #0,d5
  3180.  move.l #0,a3
  3181.  
  3182.  move.w FIRSTLEN,d0
  3183.  subq #1,d0
  3184.  bsr STARTLINE
  3185.  
  3186.  
  3187.  move.l (a7)+,a3
  3188.  move.l (a7)+,d5
  3189.  move.w (a7)+,d2
  3190.  
  3191.  move.w LASTLEN,d0
  3192.  subq #1,d0
  3193.  
  3194.  bsr STARTLINE
  3195.  
  3196.  
  3197.  move.l (a7)+,d1
  3198.  move.l (a7)+,a0
  3199.  move.l (a7)+,a2
  3200.  
  3201.  bra .noline
  3202.  
  3203.  
  3204. .bothaway:
  3205.  
  3206.  move.w #0,6+RIGHTUVS-LEFTUVS(a0)
  3207.  move.w #0,6(a0)
  3208.  
  3209. .bothtowards:
  3210.  
  3211.  ifne PH
  3212.  tst.w 16+RIGHTUVS-LEFTUVS(a0)
  3213.  blt.s .okone
  3214.  tst.w 16(a0)
  3215.  blt.s .okone
  3216.  
  3217.  move.w #0,2(a0)
  3218.  move.w #0,2+RIGHTUVS-LEFTUVS(a0)
  3219.  move.w #0,14(a0)
  3220.  move.w #0,14+RIGHTUVS-LEFTUVS(a0)
  3221.  
  3222. .okone:
  3223.  endc
  3224.  
  3225.  move.l RIGHTUVS-LEFTUVS(a0),d7
  3226.  move.l (a0)+,d2 
  3227.  
  3228.  and.l #$ffffff,d2
  3229.  and.l #$ffffff,d7
  3230.  
  3231.  moveq #0,d3
  3232.  moveq #0,d5
  3233.  move.w d2,d3
  3234.  move.w d7,d5
  3235.  swap d3
  3236.  swap d5
  3237.  sub.l d3,d5
  3238.  divs.l d0,d5
  3239.  asr.l #8,d5
  3240.  move.w d5,RIGHTBRIGHT
  3241.  asr.l #8,d3
  3242.  move.w d3,LEFTBRIGHT
  3243.  
  3244.  clr.w d2
  3245.  clr.w d7
  3246.  sub.l d2,d7
  3247.  asl.l #8,d2
  3248.  divs.l d0,d7
  3249.  asl.l #8,d7
  3250.  
  3251.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  3252.  move.l (a0)+,d3
  3253.  
  3254.  moveq #0,d4
  3255.  moveq #0,d5
  3256.  
  3257.  move.w d6,d5
  3258.  move.w d3,d4
  3259.  move.b #0,d4
  3260.  move.b #0,d5
  3261.  
  3262.  sub.l d4,d5
  3263.  divs.l d0,d5
  3264.  
  3265.  move.w d4,d2
  3266.  move.w d5,d7
  3267.  move.l d7,a1
  3268.  moveq #0,d4
  3269.  moveq #0,d5
  3270.  
  3271.  move.b d6,d5
  3272.  move.b d3,d4
  3273.  
  3274.  swap d5
  3275.  swap d4
  3276.  
  3277.  sub.l d4,d5
  3278.  divs.l d0,d5
  3279.  
  3280.  move.l d5,a3
  3281.  move.l d4,d5
  3282.  
  3283.   
  3284.  clr.w d3
  3285.  clr.w d6
  3286.  sub.l d3,d6
  3287.  divs.l d0,d6
  3288.  
  3289.  asr.l #8,d3        ; XX XX vpos vacc
  3290.  asr.l #8,d6         ; XX XX vspeed vspeed
  3291.  
  3292. ; move.l d6,a4
  3293.  
  3294.  move.w RIGHTUVS-LEFTUVS(a0),d7
  3295.  move.w (a0)+,d4
  3296.  swap d7
  3297.  clr.w d7
  3298.  swap d4
  3299.  clr.w d4
  3300.  sub.l d4,d7
  3301.  divs.l d0,d7
  3302.  asl.l #8,d4
  3303.  asl.l #8,d7
  3304.  move.w d3,d4
  3305.  move.w d6,d7
  3306.  move.l d7,a5
  3307.  
  3308. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  3309. ; swap d7
  3310. ; clr.w d7
  3311.  move.w (a0)+,d7
  3312. ; swap d5
  3313. ; clr.w d5
  3314. ; sub.l d5,d7
  3315. ; divs.l d0,d7
  3316. ; move.l d7,a6
  3317.  
  3318.  move.w RIGHTUVS-LEFTUVS(a0),d7
  3319.  swap d7
  3320.  clr.w d7
  3321.  move.w (a0)+,d6
  3322.  swap d6
  3323.  clr.w d6
  3324.  sub.l d6,d7
  3325.  divs.l d0,d7
  3326.  
  3327.  lsl.l #8,d6
  3328.  lsl.l #8,d7
  3329.  
  3330.  move.w RIGHTBRIGHT,d7
  3331.  move.l d7,a6
  3332.  
  3333.  moveq #0,d7
  3334.  moveq #0,d3
  3335.  move.w RIGHTUVS-LEFTUVS(a0),d7
  3336.  move.w (a0)+,d3
  3337.  
  3338.  addq #2,a0
  3339.  
  3340.  sub.w d3,d7
  3341.  swap d3
  3342.  swap d7
  3343.  divs.l d0,d7
  3344.  
  3345.  move.l d7,a4
  3346.  
  3347.  
  3348.  move.l a0,-(a7)
  3349.  move.l d1,-(a7)
  3350.  move.l #TEXTURES,a0
  3351.  move.w TEXTUREADD,d7
  3352.  bge.s .okaddtes5
  3353.  and.w #$7fff,d7
  3354.  add.l #65536*4,a0
  3355. .okaddtes5:
  3356.  ext.l d7
  3357.  asl.l #8,d7
  3358.  add.l d7,a0
  3359.  move.w #0,d7
  3360.  
  3361.  move.w LEFTBRIGHT,d6
  3362.  
  3363.  subq #1,d0
  3364.  swap d0
  3365.  move.w HIGHPOLY,d0
  3366.  swap d0
  3367.  
  3368.  
  3369. ; d0=xdist
  3370. ; d2=U    a1=DU
  3371. ; d3=V  a4=DV
  3372. ; d4=X  a5=DX
  3373. ; d5=Y  a6=DY
  3374. ; d6=Z  a3=DZ
  3375.  
  3376. ; d0= polynum : polynum : counter : counter
  3377. ; d1= scratch : scratch : scratch : scratch
  3378. ; d2= u : uacc : sv : svacc
  3379. ; d3= pxpos : pxpos : pxacc : pxacc
  3380. ; d4= x : xacc : v : vacc
  3381. ; d5= su : su : suacc : suacc
  3382. ; d6= z : zacc : pypos : pyacc
  3383. ; d7= scratch : scratch : scratch : scratch
  3384.  
  3385. ; a0= textures
  3386. ; a1= uspeed : uspeed : suspeed : suspeed
  3387. ; a2= screen pointer
  3388. ; a3= svspeed : svspeed : svspeed : svspeed
  3389. ; a4= pxspd : pxspd : pxspd : pxspd
  3390. ; a5= xspeed : xspeed : vspeed : vspeed
  3391. ; a6= zspeed : zspeed : pyspeed : pyspeed
  3392. ; a7= shadowmap pointer
  3393.  
  3394.  bsr STARTLINE
  3395.  
  3396.  move.l (a7)+,d1
  3397.  move.l (a7)+,a0
  3398.  move.l (a7)+,a2
  3399.  
  3400. .noline:
  3401.  add.w #320,a2
  3402.  
  3403.  swap d1
  3404.  dbra d1,DOAHORLINEGOUR
  3405.  
  3406.  bra NOPOLYGON
  3407.  
  3408.  
  3409.  
  3410.  
  3411.  
  3412. *******************************
  3413. STARTLINE:
  3414.  
  3415.  move.l a7,SAVESTACK
  3416.  move.l #SHADOWBUFFER,a7
  3417.  
  3418.  moveq #0,d1
  3419.  swap d6
  3420.  move.w d6,d1
  3421.  move.l d4,d7
  3422.  swap d7
  3423.  lsr.w #8,d7
  3424.  move.b d7,d1
  3425.  swap d6
  3426.  
  3427.  swap d0
  3428.  moveq #0,d7
  3429.  move.b (a7,d1.l*2),d7
  3430.  cmp.w d7,d0
  3431.  ble .startlight
  3432.  swap d0
  3433.  bra INTHEDARKGOUR
  3434. .startlight:
  3435.  swap d0
  3436.  bra INTHELIGHTGOUR 
  3437. .startdark:
  3438. ***********************************
  3439.  
  3440.  
  3441.  
  3442. PENUMBRAGOUR:
  3443.  moveq #0,d1
  3444.  swap d6
  3445.  move.w d6,d1
  3446.  move.l d4,d7
  3447.  lsr.l #8,d7
  3448.  swap d7
  3449.  move.b d7,d1
  3450.  swap d6
  3451.  add.l a5,d4
  3452.  add.l a6,d6
  3453.  add.l a3,d5
  3454.  
  3455.  swap d0
  3456.  moveq #0,d7
  3457.  move.b (a7,d1.l*2),d7
  3458.  cmp.w d7,d0
  3459.  ifne SHADOWMAP
  3460.  ble INTOLIGHTGOUR
  3461.  endc
  3462.  ifeq SHADOWMAP
  3463.  bra INTOLIGHTGOUR
  3464.  endc
  3465.  bra.s INTODARKGOUR
  3466.  
  3467. INTHEDARKGOUR:
  3468.  moveq #0,d1
  3469.  swap d6
  3470.  move.w d6,d1
  3471.  move.l d4,d7
  3472.  swap d7
  3473.  asr.w #8,d7
  3474.  move.b d7,d1
  3475.  swap d6
  3476.  add.l a5,d4
  3477.  add.l a6,d6
  3478.  add.l a3,d5
  3479.  
  3480.  swap d0
  3481.  moveq #0,d7
  3482.  move.b (a7,d1.l*2),d7
  3483.  cmp.w d7,d0
  3484.  ifne SHADOWMAP
  3485.  ble.s INTOPENUMGOUR
  3486.  endc
  3487.  ifeq SHADOWMAP
  3488.  bra INTOLIGHTGOUR
  3489.  endc
  3490. INTODARKGOUR:
  3491.  swap d0
  3492.  
  3493. ;**********************
  3494. ; moveq #0,d7
  3495. ;********************** 
  3496.  
  3497.  swap d2
  3498.  move.w d2,d1
  3499.  move.w d4,d7
  3500.  lsr.w #8,d7
  3501.  move.b d7,d1
  3502.  swap d2
  3503.  add.l a1,d2
  3504.  add.l a4,d3
  3505.  
  3506.  move.l #(31*32*256),d7
  3507.  move.b 1(a0,d1.w*4),d7
  3508.  bra DARKplottt
  3509.  
  3510. .noplottt
  3511.  addq #1,a2
  3512.  dbra d0,INTHEDARKGOUR
  3513.  bra DONEDONEBUM
  3514.  
  3515. INTOPENUMGOUR:
  3516.  swap d0
  3517.  
  3518. *********************
  3519. ; moveq #0,d7
  3520. *****************
  3521.  
  3522.  swap d2
  3523.  move.w d2,d1
  3524.  move.w d4,d7
  3525.  lsr.w #8,d7
  3526.  move.b d7,d1
  3527.  swap d2
  3528.  add.l a1,d2
  3529.  add.l a4,d3
  3530.  
  3531.  move.l (a0,d1.w*4),d1
  3532.  moveq #0,d7
  3533.  move.w d6,d7
  3534.  swap d3
  3535.  move.b d3,d7
  3536.  add.w d1,d7
  3537.  swap d3
  3538.  
  3539.  move.b 1(a7,d7.l*2),d7
  3540.  lsl.w #8,d7
  3541.  
  3542. ; sub.w #$1c00,d7
  3543.  asr.w #1,d7
  3544. ; add.w #$1c00,d7
  3545.  neg.w d7
  3546.  add.w #$1f00,d7
  3547.  sub.b d7,d7
  3548.  
  3549.  asl.l #5,d7
  3550.  swap d1
  3551.  move.b d1,d7
  3552.  
  3553.  
  3554.  bra.s PENUMplottt
  3555.  
  3556. .noplottt
  3557.  addq #1,a2
  3558.  dbra d0,PENUMBRAGOUR
  3559.  bra DONEDONEBUM
  3560.  
  3561.  
  3562. INTHELIGHTGOUR:
  3563.  
  3564.  moveq #0,d1
  3565.  swap d6
  3566.  move.w d6,d1
  3567.  move.l d4,d7
  3568.  swap d7
  3569.  lsr.w #8,d7
  3570.  move.b d7,d1
  3571.  swap d6
  3572.  add.l a5,d4
  3573.  add.l a6,d6
  3574.  add.l a3,d5
  3575.  
  3576.  swap d0
  3577.  moveq #0,d7
  3578.  move.b (a7,d1.l*2),d7
  3579.  cmp.w d7,d0
  3580.  
  3581.  
  3582.  ifne SHADOWMAP
  3583.  bgt.s INTOPENUMGOUR
  3584.  endc
  3585.  
  3586. INTOLIGHTGOUR:
  3587.  swap d0
  3588.  
  3589.  swap d2
  3590.  move.w d2,d1
  3591.  move.w d4,d7
  3592.  asr.w #8,d7
  3593.  move.b d7,d1
  3594.  swap d2
  3595.  
  3596.  move.l (a0,d1.w*4),d1        ; SPEC COL OFX OFY
  3597.  
  3598.  add.l a1,d2
  3599.  add.l a4,d3
  3600.  
  3601.  bra.s LIGHTPLOTT
  3602. .noplottt:
  3603.  addq #1,a2
  3604.  dbra d0,INTHELIGHTGOUR
  3605. FLIBBLEY:
  3606.  bra.s DONEDONEBUM
  3607.  
  3608. PENUMplottt
  3609.  move.b GOURPAL(pc,d7.l),(a2)+
  3610.  dbra d0,PENUMBRAGOUR
  3611.  bra.s DONEDONEBUM
  3612.  
  3613. DARKplottt
  3614.  move.b GOURPAL(pc,d7.l),(a2)+
  3615.  dbra d0,INTHEDARKGOUR
  3616.  bra.s DONEDONEBUM
  3617.  
  3618. LIGHTPLOTT:
  3619.  moveq #0,d7
  3620.  
  3621.  move.w d2,d7
  3622.  swap d5
  3623.  move.b d5,d7
  3624.  swap d5
  3625.  
  3626.  ifne BUMPSPEC
  3627.  add.w d1,d7    ; coord in spec map
  3628.  endc
  3629.  
  3630.  swap d1
  3631.  ifeq SPECMAP
  3632.  and.w #$ff,d1
  3633.  endc
  3634.  
  3635.  move.b 1(a7,d7.l*2),d7    ; specular value of point.
  3636.  lsl.w #8,d7
  3637.  
  3638.  ifne SPECULAR 
  3639.  add.w d7,d1
  3640.  endc
  3641.  
  3642.  ifeq SPECULAR
  3643.  tst.w d1
  3644.  endc
  3645.  
  3646.  bgt.s .okshiney
  3647.  and.w #$ff,d1
  3648. .okshiney
  3649.  
  3650.  move.w d6,d7
  3651.  swap d3
  3652.  move.b d3,d7
  3653.  swap d1
  3654.  
  3655.  ifne BUMPPHONG
  3656.  add.w d1,d7
  3657.  endc
  3658.  
  3659.  clr.w d1
  3660.  swap d1
  3661.  move.b 1(a7,d7.l*2),d7 ; brightness of point
  3662.  neg.b d7
  3663.  add.b #31,d7
  3664.  and.w #$ff,d7
  3665.  swap d7
  3666.  lsr.l #3,d7
  3667.  swap d3
  3668.  add.l d7,d1
  3669.  
  3670.  move.b GOURPAL(pc,d1.l),(a2)+
  3671.  dbra d0,INTHELIGHTGOUR
  3672. DONEDONEBUM:
  3673.  move.l SAVESTACK,a7
  3674.  rts
  3675.  
  3676. GOURPAL: incbin "ab3:includes/bigshadow.pal"
  3677.  
  3678.  
  3679.  
  3680.  
  3681. LEFTSHINEV: dc.l 0
  3682. RIGHTSHINEV: dc.l 0
  3683. LEFTSHINEU: dc.l 0
  3684. RIGHTSHINEU: dc.l 0
  3685.  
  3686. TOPPTR: dc.l 0
  3687. TOPPTNUM: dc.w 0
  3688. BOTPTNUM: dc.w 0
  3689. LEFTBRIGHT: dc.w 0
  3690. RIGHTBRIGHT: dc.l 0
  3691. LEFTSPEC: dc.w 0
  3692. RIGHTSPEC: dc.w 0
  3693.  
  3694. ***********************************************
  3695.     
  3696. SIMPLECALCLINE:
  3697.  move.l #ONSCREENPTS,a1
  3698.  
  3699.  move.w 2(a1,d0.w*4),d2        ;fy
  3700.  move.w 2(a1,d1.w*4),d7        ;sy
  3701.  
  3702.  move.l #RIGHTUVS,a3
  3703.  asr.w #2,d2
  3704.  asr.w #2,d7
  3705.  cmp.w d2,d7 
  3706.  beq .noline
  3707.  
  3708.  bgt.s .lineonright
  3709. .lineonleft:
  3710.  move.l #LEFTUVS,a3
  3711.  exg d0,d1
  3712.  exg d2,d7
  3713.  
  3714. .lineonright:
  3715.  move.w d0,TOPPTNUM
  3716.  move.w d1,BOTPTNUM
  3717.  
  3718.  sub.w d2,d7
  3719.  move.w d2,d3
  3720.  muls #20,d3
  3721.  asl.w #4,d2
  3722.  add.w d3,a3
  3723.  move.l a3,TOPPTR
  3724.  
  3725.  move.w d7,YDIFF
  3726.  
  3727.  move.w (a1,d0.w*4),d3        ;fx
  3728.  move.w (a1,d1.w*4),d7        ;sx
  3729.  
  3730.  sub.w d3,d7
  3731.  swap d3
  3732.  swap d7
  3733.  clr.w d3
  3734.  clr.w d7
  3735.  divs.l YDIFF-2,d7
  3736.  move.l d7,a0    ; dx
  3737.  
  3738.  move.l #UVCOORDS,a2
  3739.  move.l #SHADOWPTS,a1
  3740.  
  3741.  move.w (a2,d0.w*4),d4
  3742.  move.w 2(a2,d0.w*4),d5
  3743.  move.w (a2,d1.w*4),d6
  3744.  move.w 2(a2,d1.w*4),d7
  3745.  
  3746.  sub.w d4,d6
  3747.  sub.w d5,d7
  3748.  swap d4
  3749.  swap d5
  3750.  clr.w d4
  3751.  clr.w d5
  3752.  swap d6
  3753.  swap d7
  3754.  clr.w d6
  3755.  clr.w d7
  3756.  
  3757.  divs.l YDIFF-2,d6
  3758.  divs.l YDIFF-2,d7
  3759.  
  3760.  move.l d6,a4
  3761.  move.l d7,a5
  3762.  
  3763.  muls #10,d0
  3764.  muls #10,d1
  3765.  move.l (a1,d0.w),d6
  3766.  
  3767.  move.l (a1,d1.w),d7
  3768.  asl.l #5,d6
  3769.  asl.l #5,d7
  3770.  sub.l d6,d7
  3771.  divs.l YDIFF-2,d7
  3772.  move.l d7,a2
  3773.  move.l d6,a6
  3774.  
  3775.  move.l 4(a1,d0.w),d6
  3776.  move.l 4(a1,d1.w),d7
  3777.  asl.l #5,d6
  3778.  asl.l #5,d7
  3779.  sub.l d6,d7
  3780.  divs.l YDIFF-2,d7
  3781.  exg d7,a6
  3782.  exg d7,d6
  3783.  
  3784.  move.w 8(a1,d0.w),d0
  3785.  move.w 8(a1,d1.w),d1
  3786.  swap d0
  3787.  swap d1
  3788.  clr.w d0
  3789.  clr.w d1
  3790.  asr.l #2,d0
  3791.  asr.l #2,d1
  3792.  sub.l d0,d1
  3793.  divs.l YDIFF-2,d1
  3794.  move.l d1,a1
  3795.  move.l YDIFF-2,d1
  3796.  subq #1,d1
  3797.  
  3798. ; d3=sx a0=dsx
  3799. ; d4=u a4=du
  3800. ; d5=v a5=dv
  3801. ; d6=x a2=dx
  3802. ; d7=y a6=dy
  3803. ; d0=z a1=dz
  3804. ; d1=dsy
  3805.  
  3806.  
  3807.  add.l #128*65536,d6
  3808.  add.l #128*65536,d7
  3809.  add.l #128*65536,d0
  3810.  
  3811. .PUTINLINE:
  3812.  swap d3
  3813.  move.w d3,(a3)+
  3814.  swap d3
  3815.  add.l a0,d3
  3816.  move.l d4,(a3)+
  3817.  add.l a4,d4
  3818.  move.l d5,(a3)+
  3819.  swap d6
  3820.  add.l a5,d5
  3821.  move.w d6,(a3)+
  3822.  swap d6
  3823.  swap d7
  3824.  add.l a2,d6
  3825.  move.w d7,(a3)+
  3826.  swap d7
  3827.  swap d0
  3828.  add.l a6,d7
  3829.  move.w d0,(a3)+
  3830.  addq #4,a3
  3831.  swap d0
  3832.  add.l a1,d0
  3833.  dbra d1,.PUTINLINE
  3834.  
  3835.  tst.b Gouraud
  3836.  beq .noline
  3837.  
  3838.  move.w TOPPTNUM,d0
  3839.  move.w BOTPTNUM,d1
  3840.  move.l TOPPTR,a3
  3841.  moveq #0,d6
  3842.  move.w YDIFF,d6
  3843.  
  3844.  move.l #SPECBRIGHTS,a2
  3845.  
  3846.  moveq #0,d2
  3847.  moveq #0,d3
  3848.  move.b (a2,d0.w*4),d2
  3849.  move.b 1(a2,d0.w*4),d3
  3850.  sub.w #128,d2
  3851.  sub.w #128,d3
  3852.  
  3853.  move.w d2,d4
  3854.  move.w d3,d5
  3855.  muls ACOS,d2
  3856.  muls ASIN,d3
  3857.  sub.l d3,d2
  3858.  muls ASIN,d4
  3859.  muls ACOS,d5
  3860.  add.l d5,d4
  3861.  asl.l #2,d2
  3862.  swap d2
  3863.  asl.l #2,d4
  3864.  swap d4
  3865.  
  3866.  add.w #128,d2
  3867.  add.w #128,d4
  3868.  move.w d2,FSX
  3869.  move.w d4,FSY
  3870.  
  3871.  moveq #0,d2
  3872.  moveq #0,d3
  3873.  move.b (a2,d1.w*4),d2
  3874.  move.b 1(a2,d1.w*4),d3
  3875.  sub.w #128,d2
  3876.  sub.w #128,d3
  3877.  
  3878.  move.w d2,d4
  3879.  move.w d3,d5
  3880.  muls ACOS,d2
  3881.  muls ASIN,d3
  3882.  sub.l d3,d2
  3883.  muls ASIN,d4
  3884.  muls ACOS,d5
  3885.  add.l d5,d4
  3886.  asl.l #2,d2
  3887.  swap d2
  3888.  asl.l #2,d4
  3889.  swap d4
  3890.  
  3891.  add.w #128,d2
  3892.  add.w #128,d4
  3893.  move.w d2,SSX
  3894.  move.w d4,SSY
  3895.  
  3896.  
  3897.  move.w 2(a2,d0.w*4),d2
  3898.  move.w 2(a2,d1.w*4),d3
  3899.  
  3900.  asr.w #4,d2
  3901.  asr.w #4,d3
  3902.  
  3903.  bra .bothtowards
  3904.  
  3905.  tst.w d2
  3906.  blt .firsttowards
  3907.  bgt.s .firstaway
  3908.  
  3909.  tst.w d3
  3910.  ble .bothtowards
  3911.  bra .bothaway
  3912.  
  3913. .firstaway
  3914.  tst.w d3
  3915.  blt .sectowards
  3916.  bra .bothaway
  3917.  
  3918. .firsttowards:
  3919.  tst.w d3
  3920.  ble .bothtowards
  3921.  
  3922. ; First one is towards, the second away.
  3923. ; Do the line in two bits: one heading
  3924. ; from the first point to the rim, the
  3925. ; other heading from the rim to the second
  3926. ; point and flagged as behind.
  3927.  
  3928.  move.w d6,d7    ; total length to draw
  3929.  move.w d2,FIRSTY
  3930.  move.w d3,LASTY
  3931.  
  3932.  neg.w d2
  3933.  add.w d2,d3     ; total change in Y
  3934.  
  3935.  bra.s .onetowards
  3936.  
  3937. .sectowards:
  3938.  move.w d6,d7    ; total length to draw
  3939.  move.w d2,FIRSTY
  3940.  move.w d3,LASTY
  3941.  neg.w d3
  3942.  add.w d2,d3
  3943.  
  3944. .onetowards:
  3945.  
  3946.  muls d2,d6
  3947.  divs d3,d6    ; length of first bit of line.
  3948.  
  3949.  ext.l d6
  3950.  ext.l d7
  3951.  
  3952.  move.w d6,FIRSTLEN
  3953.  sub.l d6,d7
  3954.  move.w d7,LASTLEN
  3955.  
  3956.  add.l d7,d6
  3957.  
  3958.  move.w FIRSTY,d2
  3959.  move.w LASTY,d3
  3960.  swap d2
  3961.  clr.w d2
  3962.  swap d3
  3963.  clr.w d3
  3964.  sub.l d2,d3
  3965.  divs.l d6,d3
  3966.  move.l d3,a6
  3967.  move.l d2,d7
  3968.  
  3969.  moveq #0,d2
  3970.  moveq #0,d3
  3971.  moveq #0,d4
  3972.  moveq #0,d5
  3973.  move.b (a2,d0.w*4),d2
  3974.  move.b 1(a2,d0.w*4),d3
  3975.  
  3976.  move.w d2,FIRSTU
  3977.  move.w d3,FIRSTV
  3978.  
  3979.  move.w d2,d4
  3980.  move.w d3,d5
  3981.  sub.w #128,d2
  3982.  sub.w #128,d3
  3983.  muls d2,d2
  3984.  muls d3,d3
  3985.  add.l d3,d2
  3986.  jsr CALCSQROOT
  3987.  
  3988.  tst.w d2
  3989.  beq.s .nochng
  3990.  
  3991.  sub.w #128,d4
  3992.  sub.w #128,d5
  3993.  muls #127,d4
  3994.  muls #127,d5
  3995.  divs d2,d4
  3996.  divs d2,d5
  3997.  add.w #128,d4
  3998.  add.w #128,d5
  3999.  
  4000. .nochng:
  4001.  
  4002.  move.w d4,MIDU
  4003.  move.w d5,MIDV
  4004.  
  4005.  move.b (a2,d1.w*4),d4
  4006.  move.b 1(a2,d1.w*4),d5
  4007.  move.w d4,SECU
  4008.  move.w d5,SECV
  4009.  
  4010. ; move.w d4,d2
  4011. ; move.w d5,d3
  4012. ;
  4013. ; sub.w #128,d2
  4014. ; sub.w #128,d3
  4015. ; muls d2,d2
  4016. ; muls d3,d3
  4017. ; add.l d3,d2
  4018. ; jsr CALCSQROOT
  4019. ;
  4020. ; tst.w d2
  4021. ; beq.s .nochng2
  4022. ;
  4023. ; sub.w #128,d4
  4024. ; sub.w #128,d5
  4025. ; muls #127,d4
  4026. ; muls #127,d5
  4027. ; divs d2,d4
  4028. ; divs d2,d5
  4029. ; add.w #128,d4
  4030. ; add.w #128,d5
  4031. ;.nochng2:
  4032. ;
  4033. ; add.w MIDU,d4
  4034. ; add.w MIDV,d5
  4035. ; asr.w #1,d4
  4036. ; asr.w #1,d5
  4037. ; move.w d4,MIDU
  4038. ; move.w d4,MIDV
  4039.  
  4040.  move.l #NORMBRIGHTS,a2
  4041.  move.w (a2,d0.w*2),d0
  4042.  move.w (a2,d1.w*2),d1
  4043.  
  4044.  sub.w d0,d1
  4045.  swap d1
  4046.  swap d0
  4047.  divs.l d6,d1
  4048.  
  4049.  move.w FIRSTLEN,d6
  4050.  beq.s .nofirstbit
  4051.  ext.l d6
  4052.  
  4053.  moveq #0,d2
  4054.  moveq #0,d3
  4055.  moveq #0,d4
  4056.  moveq #0,d5
  4057.  move.w FIRSTU,d2
  4058.  move.w MIDU,d3
  4059.  move.w FIRSTV,d4
  4060.  move.w MIDV,d5
  4061.  
  4062.  sub.w d2,d3
  4063.  swap d2
  4064.  swap d3
  4065.  divs.l d6,d3
  4066.  move.l d3,a4
  4067.  
  4068.  sub.w d4,d5
  4069.  swap d4
  4070.  swap d5
  4071.  divs.l d6,d5
  4072.  move.l d5,a5
  4073.  
  4074.  bsr DOABITOFLINE
  4075. .nofirstbit:
  4076.  
  4077.  move.w LASTLEN,d6
  4078.  beq.s .nosecbit
  4079.  ext.l d6
  4080.  
  4081.  moveq #0,d2
  4082.  moveq #0,d3
  4083.  moveq #0,d4
  4084.  moveq #0,d5
  4085.  move.w MIDU,d2
  4086.  move.w SECU,d3
  4087.  move.w MIDV,d4
  4088.  move.w SECV,d5
  4089.  
  4090.  sub.w d2,d3
  4091.  swap d2
  4092.  swap d3
  4093.  divs.l d6,d3
  4094.  move.l d3,a4
  4095.  
  4096.  sub.w d4,d5
  4097.  swap d4
  4098.  swap d5
  4099.  divs.l d6,d5
  4100.  move.l d5,a5
  4101.  
  4102.  bsr DOABITOFLINE
  4103. .nosecbit:
  4104.  
  4105.  bra .noline
  4106.  
  4107. .bothaway
  4108.  
  4109. ; Both are away, so do it simply.
  4110.  
  4111. .bothtowards:
  4112.  
  4113. ; Both are towards, so do it simply and flag all
  4114. ; points as towards.
  4115.  
  4116.  swap d2
  4117.  clr.w d2
  4118.  swap d3
  4119.  clr.w d3
  4120.  sub.l d2,d3
  4121.  divs.l d6,d3
  4122.  move.l d3,a6
  4123.  move.l d2,d7
  4124.  
  4125.  moveq #0,d2
  4126.  moveq #0,d3
  4127.  moveq #0,d4
  4128.  moveq #0,d5
  4129. ; move.b (a2,d0.w*4),d2
  4130. ; move.b (a2,d1.w*4),d3
  4131. ; move.b 1(a2,d0.w*4),d4
  4132. ; move.b 1(a2,d1.w*4),d5
  4133.  
  4134.  move.w FSX,d2
  4135.  move.w SSX,d3
  4136.  move.w FSY,d4
  4137.  move.w SSY,d5
  4138.  
  4139.  sub.w d2,d3
  4140.  swap d2
  4141.  swap d3
  4142.  divs.l d6,d3
  4143.  move.l d3,a4
  4144.  
  4145.  sub.w d4,d5
  4146.  swap d4
  4147.  swap d5
  4148.  divs.l d6,d5
  4149.  move.l d5,a5
  4150.  
  4151.  move.l #NORMBRIGHTS,a2
  4152.  movem.l d2/d4,-(a7)
  4153.  
  4154.  moveq #0,d2
  4155.  moveq #0,d3
  4156.  move.b (a2,d0.w*2),d2
  4157.  move.b 1(a2,d0.w*2),d3
  4158.  sub.w #128,d2
  4159.  sub.w #128,d3
  4160.  
  4161.  move.w d2,d4
  4162.  move.w d3,d5
  4163.  muls ACOS,d2
  4164.  muls ASIN,d3
  4165.  sub.l d3,d2
  4166.  muls ASIN,d4
  4167.  muls ACOS,d5
  4168.  add.l d5,d4
  4169.  asl.l #2,d2
  4170.  swap d2
  4171.  asl.l #2,d4
  4172.  swap d4
  4173.  
  4174.  add.w #128,d2
  4175.  add.w #128,d4
  4176.  move.w d2,FSX
  4177.  move.w d4,FSY
  4178.  
  4179.  moveq #0,d2
  4180.  moveq #0,d3
  4181.  move.b (a2,d1.w*2),d2
  4182.  move.b 1(a2,d1.w*2),d3
  4183.  sub.w #128,d2
  4184.  sub.w #128,d3
  4185.  
  4186.  move.w d2,d4
  4187.  move.w d3,d5
  4188.  muls ACOS,d2
  4189.  muls ASIN,d3
  4190.  sub.l d3,d2
  4191.  muls ASIN,d4
  4192.  muls ACOS,d5
  4193.  add.l d5,d4
  4194.  asl.l #2,d2
  4195.  swap d2
  4196.  asl.l #2,d4
  4197.  swap d4
  4198.  
  4199.  add.w #128,d2
  4200.  add.w #128,d4
  4201.  move.w d2,SSX
  4202.  move.w d4,SSY
  4203.  
  4204.  moveq #0,d0
  4205.  moveq #0,d1
  4206.  moveq #0,d3
  4207.  moveq #0,d5
  4208.  
  4209.  move.w FSY,d3
  4210.  move.w SSY,d5
  4211.  move.w FSX,d0
  4212.  move.w SSX,d1
  4213.  
  4214.  ext.l d0
  4215.  ext.l d1
  4216.  sub.w d0,d1
  4217.  swap d1
  4218.  swap d0
  4219.  divs.l d6,d1
  4220.  
  4221.  ext.l d3
  4222.  ext.l d5
  4223.  sub.w d3,d5
  4224.  swap d5
  4225.  swap d3
  4226.  divs.l d6,d5
  4227.  
  4228.  movem.l (a7)+,d2/d4
  4229.  
  4230.  move.l d6,-(a7)
  4231.  bsr DOABITOFLINE
  4232.  move.l (a7)+,d6
  4233.  
  4234.  move.w TOPPTNUM,d0
  4235.  move.w BOTPTNUM,d1
  4236.  move.l TOPPTR,a3
  4237.  move.l #NORMVECTS,a2
  4238.  muls #6,d0
  4239.  muls #6,d1
  4240.  moveq #0,d2
  4241.  moveq #0,d3
  4242.  move.w 2(a2,d0.w),d2    ; firsty
  4243.  move.w 2(a2,d1.w),d3    ; secy
  4244.  sub.w d2,d3
  4245.  swap d3
  4246.  swap d2
  4247.  divs.l d6,d3
  4248.  
  4249.  subq #1,d6
  4250. .stickiny
  4251.  swap d2
  4252.  move.w d2,18(a3)
  4253.  swap d2
  4254.  add.l d3,d2
  4255.  add.w #20,a3
  4256.  dbra d6,.stickiny
  4257.  
  4258. .noline:
  4259.  rts
  4260.  
  4261.  DOABITOFLINE:
  4262.  subq #1,d6
  4263.  
  4264. .STICKINGOUR:
  4265.  swap d7
  4266.  move.b d7,2(a3)
  4267.  swap d7
  4268.  add.l a6,d7
  4269.  swap d0
  4270.  move.w d0,4(a3)
  4271.  swap d0
  4272.  add.l d1,d0
  4273.  swap d2
  4274.  move.b d2,8(a3)
  4275.  swap d4
  4276.  move.b d4,9(a3)
  4277.  swap d4
  4278.  swap d3
  4279.  move.w d3,16(a3)
  4280.  swap d3
  4281.  add.l d5,d3
  4282.  
  4283.  adda.w #20,a3
  4284.  swap d2
  4285.  add.l a4,d2
  4286.  add.l a5,d4
  4287.  dbra d6,.STICKINGOUR
  4288.  
  4289.  rts
  4290.  
  4291. FIRSTY: dc.w 0
  4292. LASTY: dc.w 0
  4293. FIRSTU: dc.w 0
  4294. SECU: dc.w 0
  4295. FIRSTV: dc.w 0
  4296. SECV: dc.w 0
  4297.     dc.w 0
  4298. FIRSTLEN: dc.w 0
  4299.     dc.w 0
  4300. LASTLEN: dc.w 0
  4301. MIDU: dc.w 0
  4302. MIDV: dc.w 0
  4303.  
  4304. *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  4305.  
  4306.  
  4307.  
  4308. ************************************************
  4309. ************************************************
  4310. ************************************************
  4311. ************************************************
  4312. ************************************************
  4313. ************************************************
  4314. ************************************************
  4315. ************************************************
  4316. ************************************************
  4317. ************************************************
  4318. ************************************************
  4319. ************************************************
  4320. ************************************************
  4321. ************************************************
  4322. ************************************************
  4323. ************************************************
  4324. ************************************************
  4325.  
  4326.  move.w d3,TOPLINE
  4327.  move.w d4,BOTLINE
  4328.  
  4329.  
  4330.  
  4331.  
  4332. *********************************************
  4333.  
  4334. CALCSQROOT:
  4335.  tst.l d2
  4336.  beq .oksqr
  4337.  
  4338.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  4339.  
  4340.  move.w #31,d0
  4341. .findhigh
  4342.  btst d0,d2
  4343.  bne .foundhigh
  4344.  dbra d0,.findhigh
  4345. .foundhigh
  4346.  asr.w #1,d0
  4347.  clr.l d3
  4348.  bset d0,d3
  4349.  move.l d3,d0
  4350.  
  4351.  move.w d0,d1
  4352.  muls d1,d1    ; x*x
  4353.  sub.l d2,d1    ; x*x-a
  4354.  asr.l #1,d1    ; (x*x-a)/2
  4355.  divs d0,d1    ; (x*x-a)/2x
  4356.  sub.w d1,d0    ; second approx
  4357.  bgt .stillnot0
  4358.  move.w #1,d0
  4359. .stillnot0
  4360.  
  4361.  move.w d0,d1
  4362.  muls d1,d1
  4363.  sub.l d2,d1
  4364.  asr.l #1,d1
  4365.  divs d0,d1
  4366.  sub.w d1,d0    ; second approx
  4367.  bgt .stillnot02
  4368.  move.w #1,d0
  4369. .stillnot02
  4370.  
  4371.  move.w d0,d1
  4372.  muls d1,d1
  4373.  sub.l d2,d1
  4374.  asr.l #1,d1
  4375.  divs d0,d1
  4376.  sub.w d1,d0    ; second approx
  4377.  bgt .stillnot03
  4378.  move.w #1,d0
  4379. .stillnot03
  4380.  
  4381.  move.w d0,d2
  4382.  ext.l d2
  4383.  
  4384.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  4385.  
  4386. .oksqr
  4387.  rts
  4388.  
  4389.  
  4390. **********************************************
  4391. **********************************************
  4392. **********************************************
  4393. **********************************************
  4394. **********************************************
  4395. **********************    ************************
  4396. **********************************************
  4397. **********************************************
  4398. **********************************************
  4399. **********************************************
  4400. **********************************************
  4401. **********************************************
  4402. **********************************************
  4403. **********************************************
  4404. **********************************************
  4405. **********************************************
  4406. **********************************************
  4407. **********************************************
  4408. **********************************************
  4409.  
  4410. TOPLINE: dc.w 0
  4411. BOTLINE: dc.w 0
  4412.  
  4413.  
  4414.  
  4415. **********************************************
  4416. **********************************************
  4417. **********************************************
  4418. **********************************************
  4419. **********************************************
  4420. **********************************************
  4421. **********************************************
  4422. **********************************************
  4423. **********************************************
  4424. **********************************************
  4425. **********************************************
  4426. **********************************************
  4427. **********************************************
  4428. **********************************************
  4429. **********************************************
  4430. **********************************************
  4431. **********************************************
  4432. **********************************************
  4433. **********************************************
  4434.     
  4435.  
  4436.     
  4437.  dc.w 0
  4438. YDIFF: dc.w 0
  4439.  
  4440. SPINAROUND: dc.w 0    
  4441. XCOS: dc.w 0
  4442. YCOS: dc.w 0
  4443. XSIN: dc.w 0
  4444. YSIN: dc.w 0
  4445. XCOS3: dc.w 0
  4446. YCOS3: dc.w 0
  4447. XSIN3: dc.w 0
  4448. YSIN3: dc.w 0
  4449. XCOS2: dc.w 0
  4450. YCOS2: dc.w 0
  4451. XSIN2: dc.w 0
  4452. YSIN2: dc.w 0
  4453. XADD: dc.l 0
  4454. YADD: dc.l 0
  4455. ZADD: dc.l 0
  4456. XOFF: dc.w 0
  4457. YOFF: dc.w 0
  4458. OLDXM: dc.w 0
  4459. OLDYM: dc.w 0
  4460.  
  4461.  
  4462.  
  4463. TEXTUREADD: dc.w 0
  4464.  
  4465.  
  4466. **********************************************************
  4467.  
  4468. UVCOORDS: ds.l 250
  4469. ROTATEDPTS: ds.l 250*4
  4470. SHADOWPTS: ds.l 250*4
  4471. ONSCREENPTS: ds.l 250
  4472.  
  4473. ZOFF:
  4474.  ifeq LARGESCREEN
  4475.  dc.w 768
  4476.  endc
  4477.  ifne LARGESCREEN
  4478.  dc.w 300
  4479.  endc
  4480.  
  4481. LEFTRIGHT: ds.l 256
  4482.  
  4483. POLYGONDATA:
  4484.  ds.b 30000
  4485.  
  4486. OBJNAME: dc.b "ab3:vectobj/testcube",0
  4487.  even
  4488. doslibname: dc.b 'dos.library',0
  4489.  even
  4490. doslib: dc.l 0
  4491.  
  4492. ****************************
  4493.  
  4494. SINETABLE:
  4495.  incbin "ab3:includes/bigsine"
  4496.  
  4497.  
  4498. YANG: dc.w 0
  4499. XANG: dc.w 0
  4500.  
  4501.  
  4502. xmouse: dc.w 0
  4503. ymouse: dc.w 0
  4504.  
  4505. spleen: dc.w 0
  4506. lastspleen: dc.w 0
  4507.  
  4508. COPIEDPAL:
  4509.  dc.w 256,0
  4510.  ds.l 3*256
  4511.  ds.l 10
  4512.  
  4513. SHADOWBUFFER:
  4514. HIGHLIGHT: incbin "work:temp/HIGHLIGHT"
  4515.  
  4516. PALETTEBIT:
  4517. ; incbin "256palette"
  4518. ; dc.w $ffff,$fffe
  4519.  
  4520.  incbin "ab3:shadowtex/shadowpal"
  4521.  
  4522.  include "ab3:source_4000/chunky.s"
  4523.  
  4524. willy: ds.w 48
  4525.  
  4526.  
  4527. PALS:
  4528.  ds.l 2*49
  4529.  
  4530. pregour: dc.b 0
  4531. Gouraud: dc.b 0
  4532.  
  4533. PointAngPtr: dc.l 0
  4534. FRAMENUM: dc.w 0
  4535. PolyAngPtr: dc.l 0
  4536. PtsPtr: dc.l 0
  4537. LinesPtr: dc.l 0
  4538. POINTER_TO_POINTERS: dc.l 0
  4539. FRAME: dc.w 4
  4540. FLIBBLE: dc.w 0
  4541. START_OF_OBJECT: dc.l 0
  4542. num_points: dc.w 0
  4543. num_frames: dc.w 0
  4544. SORTIT: dc.w 0
  4545. PartBuffer: ds.l 2*32
  4546. endparttab:
  4547.  
  4548. x1: dc.w 0
  4549. y1: dc.w 0
  4550. z1: dc.w 0
  4551. x2: dc.w 0
  4552. y2: dc.w 0
  4553. z2: dc.w 0
  4554. x2b: dc.w 0
  4555. y2b: dc.w 0
  4556. z2b: dc.w 0
  4557.  
  4558. x3: dc.w 0
  4559. y3: dc.w 0
  4560. z3: dc.w 0
  4561.  
  4562. l1: dc.w 0
  4563. l2: dc.w 0
  4564.  
  4565. OBJONOFF: dc.l 0
  4566.  
  4567. SAVEHIGHS: ds.w 30
  4568.  
  4569. FASTBUFFER:
  4570.  dc.l fasty
  4571.  
  4572.  DS.B 64*256
  4573. fasty: ds.b 320*256
  4574.  ds.b 64*256
  4575.  
  4576.  ifne MOTIONBLUR
  4577. fasty2:
  4578.  ds.b 320*256
  4579.  endc
  4580.  
  4581. NORMBRIGHTS: ds.w 250
  4582.  
  4583. SPECBRIGHTS:
  4584.  dcb.l 100,31
  4585.  
  4586. ENDNORM:
  4587.  
  4588. LEFTUVS: ds.w 10*256
  4589. RIGHTUVS: ds.w 10*256
  4590.  
  4591. NORMVECTS: ds.w 3*250
  4592.  
  4593. ;WORLD: incbin "ab3:includes/world"
  4594.  
  4595. ;TWEEN: incbin "ab3:includes/tweenbrightfile"
  4596.  
  4597.  
  4598.  
  4599. NEBBIE: incbin "work:temp/nebbieroar"
  4600.     ds.l (192/4)*16
  4601.  
  4602.  SECTION blib,code_f
  4603.  
  4604. TEXTURES:
  4605.  incbin "ab3:shadowtex/shadowmaps"
  4606.  even
  4607.  
  4608. BLUR:
  4609.  ifne MOTIONBLUR
  4610.  incbin "ab3:shadowtex/blurfile"
  4611.  endc
  4612.  
  4613. Font: dc.l fontplace
  4614.  
  4615. fontplace: incbin "ab3:XENFONT.bin"
  4616.  
  4617.  SECTION BGDROP,code_c
  4618.  
  4619. RAWSCRN:
  4620.  ds.l 2560*8
  4621.